Przeładowanie operatora

Słowo operator kluczowe deklaruje funkcję określającą, co oznacza operator-symbol po zastosowaniu do wystąpień klasy. Daje to operatorowi więcej niż jedno znaczenie lub "przeciąża". Kompilator rozróżnia różne znaczenia operatora, sprawdzając typy jego operandów.

Składnia

typeoperatoroperator-symbol(parametr-list)

Uwagi

Funkcję większości wbudowanych operatorów można zdefiniować globalnie lub na podstawie klasy. Przeciążone operatory są implementowane jako funkcje.

Nazwa przeciążonego operatora to operatorx, gdzie x jest operatorem, jak pokazano w poniższej tabeli. Na przykład aby przeciążyć operator dodawania, należy zdefiniować funkcję o nazwie operator+. Podobnie, aby przeciążyć operator dodawania/przypisania, +=zdefiniuj funkcję o nazwie operator+=.

Operatory możliwe do ponownego zdefiniowania

Operator Nazwisko Typ
, Comma Plik binarny
! Not logiczny Jednoargumentowy
!= Nierówność Plik binarny
% Modulo Plik binarny
%= Modulo i przypisanie Plik binarny
& Bitowe AND Plik binarny
& Adres Jednoargumentowy
&& AND logiczne Plik binarny
&= Bitowe AND i przypisanie Plik binarny
( ) Wywoływanie funkcji
( ) Operator rzutowania Jednoargumentowy
* Mnożenie Plik binarny
* Wyłusczenie wskaźnika Jednoargumentowy
*= Mnożenie i przypisanie Plik binarny
+ Dodatek Plik binarny
+ Jednoargumentowy plus Jednoargumentowy
++ Przyrost 1 Jednoargumentowy
+= Dodawanie i przypisanie Plik binarny
- Odejmowanie Plik binarny
- negacja jednoargumentowa Jednoargumentowy
-- Dekrementacja 1 Jednoargumentowy
-= Odejmowanie i przypisanie Plik binarny
-> Wybór elementu członkowskiego Plik binarny
->* Wybór wskaźnika do elementu członkowskiego Plik binarny
/ Wydział Plik binarny
/= Dzielenie i przypisanie Plik binarny
< Mniejsze niż Plik binarny
<< Przesunięcie w lewo Plik binarny
<<= Przypisanie przesunięcia w lewo Plik binarny
<= Mniejsze niż lub równe Plik binarny
= Przypisywanie Plik binarny
== Równość Plik binarny
> Większe niż Plik binarny
>= Większe niż lub równe Plik binarny
>> Przesunięcie w prawo Plik binarny
>>= Przypisywanie przesunięcia w prawo Plik binarny
[ ] Indeks dolny tablicy
^ Wyłączny LUB Plik binarny
^= Przypisanie na wyłączność LUB Plik binarny
| Bitowe alternatywne OR Plik binarny
|= Bitowe OR alternatywne i przypisanie Plik binarny
|| OR logiczne Plik binarny
~ Uzupełnienie jedynkowe Jednoargumentowy
delete Delete
new Nowe
operatory konwersji operatory konwersji Jednoargumentowy

1 Istnieją dwie wersje operatorów przyrostu jednoargumentowego i dekrementacji: wstępne zwiększanie i przyrost.

Aby uzyskać więcej informacji, zobacz Ogólne reguły przeciążania operatorów. Ograniczenia dotyczące różnych kategorii przeciążonych operatorów opisano w następujących tematach:

Operatory pokazane w poniższej tabeli nie mogą być przeciążone. Tabela zawiera symbole # preprocesora i ##.

Operatory niezdefiniowalne

Operator Nazwisko
. Wybór elementu członkowskiego
.* Wybór wskaźnika do elementu członkowskiego
:: Rozpoznawanie zakresu
? : Warunkowe
# Preprocesor konwertuj na ciąg
## Łączenie preprocesora

Mimo że przeciążone operatory są zwykle wywoływane niejawnie przez kompilator po napotkaniu ich w kodzie, można je wywołać jawnie w taki sam sposób, jak każda funkcja składowa lub inna niż liczba jest wywoływana:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

Przykład

Poniższy przykład przeciąża operator, + aby dodać dwie liczby zespolone i zwrócić wynik.

// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

struct Complex {
   Complex( double r, double i ) : re(r), im(i) {}
   Complex operator+( Complex &other );
   void Display( ) {   cout << re << ", " << im << endl; }
private:
   double re, im;
};

// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
   return Complex( re + other.re, im + other.im );
}

int main() {
   Complex a = Complex( 1.2, 3.4 );
   Complex b = Complex( 5.6, 7.8 );
   Complex c = Complex( 0.0, 0.0 );

   c = a + b;
   c.Display();
}
6.8, 11.2

W tym obszarze

Zobacz też

Wbudowane operatory, pierwszeństwo i kojarzenie języka C++
Słowa kluczowe