Przeładowanie operatora
operator Słowo kluczowe deklaruje funkcję Określanie, co operator-symbol oznacza w przypadku wystąpienia klasy.Zapewnia operator więcej niż jeden, co oznacza, lub "przeciążanie" go.Kompilator rozróżnia inną funkcję operatora przez sprawdzenie typy argumentów.
type operator operator-symbol ( parameter-list )
Uwagi
Funkcja najbardziej wbudowane operatorów można ponownie zdefiniować globalnie lub na podstawie klasy przez klasę.Przeciążone operatory są wykonywane jako funkcje.
Nazwa operatora przeciążenia jest operatorx, gdzie x jest operator, jak w poniższej tabeli.Na przykład, aby operator dodawania, definiowania funkcji o nazwie operator+.Podobnie, aby przeładowania operator dodawania/przypisania +=, zdefiniuj funkcji o nazwie operator+=.
Operatory redefinable
Operator |
Nazwa |
Typ |
---|---|---|
, |
Przecinek |
plików binarnych |
! |
Logiczne nie |
Jednoargumentowy |
!= |
Nierówność |
plików binarnych |
% |
Modulo |
plików binarnych |
%= |
Modulo i przypisanie |
plików binarnych |
& |
Bitowe ORAZ |
plików binarnych |
& |
Adres |
Jednoargumentowy |
&& |
AND logiczne |
plików binarnych |
&= |
Bitowe AND i przypisanie |
plików binarnych |
( ) |
Wywołanie funkcji |
— |
( ) |
Operator rzutowania |
Jednoargumentowy |
* |
Mnożenie |
plików binarnych |
* |
Wskaźnik cofnięcia odwołania |
Jednoargumentowy |
*= |
Mnożenie i przypisanie |
plików binarnych |
+ |
Dodawanie |
plików binarnych |
+ |
Plus jednoargumentowy |
Jednoargumentowy |
++ |
Przyrost 1 |
Jednoargumentowy |
+= |
Dodawanie i przypisanie |
plików binarnych |
– |
Odejmowanie |
plików binarnych |
– |
negacja jednoargumentowa |
Jednoargumentowy |
–– |
Zmniejsz 1 |
Jednoargumentowy |
–= |
Odejmowanie i przypisanie |
plików binarnych |
–> |
Wybór elementu członkowskiego |
plików binarnych |
–>* |
Wybór wskaźnik do elementu członkowskiego |
plików binarnych |
/ |
Dzielenie |
plików binarnych |
/= |
Dzielenie i przypisanie |
plików binarnych |
< |
Mniejsze niż |
plików binarnych |
<< |
Przesunięcie w lewo |
plików binarnych |
<<= |
Lewy shift przypisania |
plików binarnych |
<= |
Mniejsze niż lub równe |
plików binarnych |
= |
Przypisanie |
plików binarnych |
== |
Równość |
plików binarnych |
> |
Większe niż |
plików binarnych |
>= |
Większe niż lub równe |
plików binarnych |
>> |
Przesunięcie w prawo |
plików binarnych |
>>= |
Prawy shift przypisania |
plików binarnych |
[ ] |
Indeks dolny tablicy |
— |
^ |
LUB wykluczające |
plików binarnych |
^= |
Przypisanie lub wyłączności |
plików binarnych |
| |
Bitowe alternatywne OR |
plików binarnych |
|= |
Bitowe OR alternatywne i przypisanie |
plików binarnych |
|| |
OR logiczne |
plików binarnych |
~ |
Uzupełnienie jedynkowe |
Jednoargumentowy |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
operatory konwersji |
Jednoargumentowy |
1 Zwiększ dwie wersje jednoargumentowy i zmniejszenie operatorów istnieje: preincrement i postincrement.
Zobacz ogólne zasady przeciążanie operatora uzyskać więcej informacji.Ograniczenia w różnych kategorii przeciążone operatory są opisane w następujących tematach:
Nie może być przeciążone operatory wyświetlane w poniższej tabeli.Tabela zawiera symbole preprocessor # i ##.
Operatory Nonredefinable
Operator |
Name |
. |
Wybór elementu członkowskiego |
.* |
Wybór wskaźnik do elementu członkowskiego |
:: |
Rozpoznawanie zakresu |
? : |
Warunkowe |
# |
Konwertuj Preprocessor ciąg |
## |
Preprocesora połączenia |
Mimo że przeciążenia operatory są zwykle nazywane niejawnie przez kompilator po ich napotkaniu w kodzie, może być wykorzystywane jawnie taki sam sposób jak każdy członek lub nie przynależącego funkcja jest wywoływana:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Przykład
Następujący przykład przeciążenia + operator, aby dodać złożonych dwie liczby 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