Udostępnij za pośrednictwem


Ogólne zasady przeciążanie

Następujące zasady ograniczyć jak przeciążone operatory są implementowane.Jednakże nie stosuje do Nowy i usunąć podmioty gospodarcze, które są objęte oddzielnie.

  • Nie można definiować nowe podmioty gospodarcze, takie jak **.

  • Nie można ponownie zdefiniować znaczenie operatorów, gdy jest stosowany do wbudowanych typów danych.

  • Przeciążone operatory musi być funkcji składowej klasy niestatycznego lub funkcja globalna.Funkcja globalna, który potrzebuje dostępu do członków prywatnym ani chronionym klasy musi być zadeklarowany jako przyjaciel tej klasy.Funkcja globalna musi mieć co najmniej jeden argument jest klasy lub typu wyliczanego lub że jest to odwołanie do klasy lub typ wyliczeniowy.Na przykład:

    // 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()
    {
    }
    

    Poprzedni przykładowy kod deklaruje mniej-niż operator jako funkcji składowej; Jednakże operatorów dodawania są deklarowane jako funkcje globalne, mających dostęp do przyjaciela.Należy zauważyć, że więcej niż jednej implementacji można przewidziane danego operatora.W przypadku poprzedniego operatora dodawania dwóch implementacji są pod warunkiem ułatwiające przemienność.Jest równie prawdopodobne że operatorów, które dodać Point do Point, int do Point, i tak dalej może być wprowadzany w życie.

  • Podmioty gospodarcze przestrzegaj pierwszeństwo, grupowanie i liczba argumentów dyktowana przez ich typowym zastosowaniem z wbudowanych typów.Jest więc sposobem express pojęcie "dodać 2 i 3 do obiektu typu Point," Oczekiwano 2, które mają zostać dodane do x współrzędnych i 3, które mają zostać dodane do y koordynacji.

  • Operatory jednoargumentowe zadeklarowany jako funkcji elementów członkowskich nie wymaga żadnych argumentów; deklarowane jako funkcje globalne, podejmują się jeden argument.

  • Operatory dwuargumentowe, deklarowane jako funkcje składowe podjąć jeden argument; deklarowane jako funkcje globalne, podejmują się dwa argumenty.

  • Jeśli podmiot gospodarczy może być używana jako jednoargumentowe lub operatora binarnego (&, *, +, i ), mogą przeciążać każdego zastosowania osobno.

  • Przeciążone operatory nie może mieć argumentów domyślne.

  • Wszystkie przeciążone operatory, z wyjątkiem przydziału (operator=) są dziedziczone przez klas pochodnych.

  • Pierwszy argument dla funkcji składowej przeciążone operatory zawsze jest typem klasy obiektu, dla którego podmiot nie jest wywoływany (klasy, w którym podmiot gospodarczy jest zadeklarowany jako lub Klasa pochodna od klasy).Nie konwersje są dostarczane do pierwszego argumentu.

Należy zauważyć, że znaczenie podmioty gospodarcze mogą być zmieniane całkowicie.Zawierający rozumieniu adres z (&), przydziału (=) i operatorów wywołania funkcji.Również tożsamości, które mogą polegać na wbudowanych typów można zmienić za pomocą przeciążanie operatora.Na przykład poniższe instrukcje cztery są zazwyczaj równoważnych, gdy całkowicie ocenione:

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

Tożsamość ta nie może opierać się dla typu klasy, które podmioty gospodarcze na przeciążenie.Ponadto niektóre wymogi niejawny w wykorzystaniu tych operatorów dla typów podstawowych są złagodzone dla przeciążone operatory.Na przykład, operator dodawania/przypisania, +=, wymaga lewy operand l-wartość po zastosowaniu do podstawowych typów; gdy jest przeciążony operator nie istnieje taki wymóg.

[!UWAGA]

Dla spójności jest często najlepszym postępuj zgodnie z wzorem wbudowanych typów podczas definiowania przeciążone operatory.Semantyka Przeciążony operator różnią się znacznie od znaczenia w innych kontekstach, może być bardziej skomplikowane niż jest to użyteczne.

Zobacz też

Informacje

Przeciążanie