Przeciążanie
operator Słowa kluczowego deklaruje funkcję Określanie, co operator-symbol oznacza, że stosowane do wystąpienia klasy.Daje rozumieniu więcej niż jeden operator lub "overloads" go.Kompilator rozróżnia między różne znaczenie operator poprzez zbadanie typy argumentów.
type operator operator-symbol ( parameter-list )
Uwagi
Możesz zmienić definicję funkcji wbudowanych najbardziej operatorów globalnie lub na podstawie klasy przez klasę.Przeciążone operatory są implementowane jako funkcje.
Nazwa operatora przeciążonego jest operatorx, gdzie x jest operatorem pojawiającej się w poniższej tabeli.Na przykład, przeciążyć operatora dodawania, można zdefiniować funkcję o nazwie operator+.Podobnie, przeciążyć operatora dodawania/przydziału +=, zdefiniować funkcję o nazwie operator+=.
Redefinable operatory
Operator |
Nazwa |
Typ |
---|---|---|
, |
Przecinek |
Binarne |
! |
Logiczne NOT |
Jednoargumentowy |
!= |
Nierówności |
Binarne |
% |
Moduł |
Binarne |
%= |
Moduł przypisania |
Binarne |
& |
Iloczynu (AND) |
Binarne |
& |
Adres od |
Jednoargumentowy |
&& |
Logiczne I |
Binarne |
&= |
Przypisanie z bitowym AND |
Binarne |
( ) |
Wywołanie funkcji |
— |
( ) |
Operator rzutowania |
Jednoargumentowy |
* |
Mnożenie |
Binarne |
* |
Wskaźnik nieprawidłowego |
Jednoargumentowy |
*= |
Przypisanie mnożenia |
Binarne |
+ |
Dodanie |
Binarne |
+ |
Plus jednoargumentowy |
Jednoargumentowy |
++ |
Przyrost 1 |
Jednoargumentowy |
+= |
Przypisanie z dodawaniem |
Binarne |
– |
Odejmowanie |
Binarne |
– |
Negacja jednoargumentowy |
Jednoargumentowy |
–– |
Osłabienie 1 |
Jednoargumentowy |
–= |
Przypisanie odejmowania |
Binarne |
–> |
Wybór elementu członkowskiego |
Binarne |
–>* |
Wybór wskaźnik do elementu członkowskiego |
Binarne |
/ |
Rejon |
Binarne |
/= |
Przypisanie z dzieleniem |
Binarne |
< |
Mniej niż |
Binarne |
<< |
Lewy shift |
Binarne |
<<= |
Przypisanie lewy shift |
Binarne |
<= |
Mniejsze lub równe |
Binarne |
= |
Przypisania |
Binarne |
== |
Równości |
Binarne |
> |
Większe niż |
Binarne |
>= |
Większe niż lub równe |
Binarne |
>> |
Prawy shift |
Binarne |
>>= |
Przypisanie prawy shift |
Binarne |
[ ] |
Indeks dolny tablicy |
— |
^ |
Wyłączne OR |
Binarne |
^= |
Wyłączne lub przypisania |
Binarne |
| |
Bitowe włącznie lub |
Binarne |
|= |
Bitowe włącznie lub przypisania |
Binarne |
|| |
Logiczne OR |
Binarne |
~ |
Jedynkowe |
Jednoargumentowy |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
Operatory konwersji |
Jednoargumentowy |
1 Przyrost wartości dwie wersje jednoargumentowe i istnieje osłabienie podmiotów: preincrement i postincrement.
Zobacz Ogólne zasady przeciążanie operatora Aby uzyskać więcej informacji.Ograniczenia dotyczące różnych kategorii przeciążone operatory są opisane w następujących tematach:
Nie można obciążać operatorów, pokazane w poniższej tabeli.Tabela zawiera symboli preprocesora # i ##.
Operatory Nonredefinable
Operator |
Name |
. |
Wybór elementu członkowskiego |
.* |
Wybór wskaźnik do elementu członkowskiego |
:: |
Zakres rozdzielczości |
? : |
Warunkowe |
# |
Konwertuj preprocesora na ciąg |
## |
Złączanie preprocesora |
Chociaż przeciążone operatory są zazwyczaj nazywane niejawnie przez kompilator po napotkaniu w kodzie, te mogą być wywoływane jawnie taki sam sposób, jak każdy członek lub wywoływana jest funkcja prawodawstwa wspólnotowego:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Przykład
Overloads następującą przykład + operatora, aby dodać złożonym dwóch liczb i zwraca 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();
}
Dane wyjściowe
6.8, 11.2