Sdílet prostřednictvím


Obecná pravidla pro operátor přetížení

Následující pravidla omezit jak přetížené operátory jsou implementovány.Však nelze použít k nové a Odstranit operátory, které jsou uvedeny samostatně.

  • Nelze definovat nové operátory, například **.

  • Nelze předefinovat smyslu operátorů při použití vestavěných datových typů.

  • Přetížené operátory musí být členské funkce nestatické třídy nebo globální funkce.Globální funkce, který potřebuje přístup k soukromé nebo chráněné členy musí být deklarováno jako přítele třídy.Globální funkce musí trvat alespoň jeden argument třídy nebo Výčtový typ nebo který je odkaz na třídu nebo Výčtový typ.Příklad:

    // rules_for_operator_overloading.cpp
    class Point
    {
    public:
        Point operator<( Point & );  // Declare a member operator 
                                     //  overload.
        // Declare addition operators.
        friend Point operator+( Point&, int );
        friend Point operator+( int, Point& );
    };
    
    int main()
    {
    }
    

    Předcházející ukázce kódu deklaruje méně-než operátor jako členské funkce; Přidání operátory jsou však deklarován jako globální funkce, které mají přístup přítele.Poznámka: Implementace více lze zadat pro daný operátor.Z předchozího operátor sčítání dvou implementací jsou poskytovány usnadnění commutativity.Je stejně pravděpodobné že operátory, které přidáte Point na Point, int na Point, atd., může být implementováno.

  • Provozovatelé dodržovat přednost, seskupení a operandů dány jejich typické použití předdefinovaných typů.Proto žádným způsobem vyjádřit pojem "přidat objekt typu 2 a 3 Point," očekává 2 doplňuje x souřadnice a 3, které mají být přidány do y koordinovat.

  • Unární operátory deklarován jako funkce členů přijmout žádné argumenty; Pokud je deklarován jako globální funkce, přijmou jeden argument.

  • Binární operátory deklarován jako funkce členů trvat jeden argument; Pokud je deklarován jako globální funkce, přijmou dva argumenty.

  • Pokud operátor lze použít jako unární nebo binární operátor (a, *, +, a ), každé použití může přetížit samostatně.

  • Přetížené operátory nemůže mít výchozí argumenty.

  • Všechny přetížené operátory kromě přiřazení (operator=) jsou zděděny odvozené třídy.

  • První argument pro členské funkce-přetížené operátory je vždy typu třídy objektu, pro které provozovatel není vyvolána (třída, ve kterém hospodářský subjekt je deklarována nebo Třída odvozená ze třídy).Žádné převody jsou dodávány v prvním argumentu.

Všimněte si, že je zcela změněn význam hospodářské subjekty.Smyslu adresu z, který obsahuje (a), přiřazení (=) a volání funkce operátory.Také identity, které mohou dovolávat předdefinovaných typů lze změnit pomocí operátoru přetížení.Například následující čtyři příkazy jsou obvykle rovnocenné při zcela vyhodnocení:

var = var + 1;
var += 1;
var++;
++var;

Tuto identitu nelze dovolávat pro typy tříd, které přetěžování operátorů.Kromě toho některé požadavky implicitní v použití těchto operátorů pro základní typy jsou zmírněny pro přetížené operátory.Například operátor sčítání nebo přiřazení +=, vyžaduje levý operand l-hodnotu při použití základních typů; operátor je přetížena neexistuje žádný takový požadavek.

[!POZNÁMKA]

Konzistence je často nejlepší model předdefinované typy, postupujte při definování přetížené operátory.Sémantika přetíženého operátoru se významně liší od jeho význam v jiných kontextech, může být matoucí více než užitečné.

Viz také

Referenční dokumentace

Operátor přetížení