Überladen von Operatoren
Das operator-Schlüsselwort deklariert eine Funktion operator-symbol angeben, das heißt wenn es auf Instanzen einer Klasse angewendet wird.Dies gibt den Operator mehr als bedeutender einer“ oder „überlädt.Der Compiler unterscheidet zwischen verschiedenen Bedeutungen eines Operators, indem die Typen ihrer Operanden überprüft.
type operator operator-symbol ( parameter-list )
Hinweise
Sie können die Funktion für die meisten integrierten Operatoren oder auf einer Klasse-durch global Basis Klasse neu definieren.Überladene Operatoren werden als Funktionen implementiert wird.
Der Name eines überladenen Operators ist operatorx, in dem x der Operator ist, wie es in der folgenden Tabelle angezeigt wird.Um beispielsweise den Additionsoperator zu überladen, definieren Sie eine Funktion, die operator+aufgerufen wird.Entsprechend das Hinzufügen/Zuweisungsoperator zu überladen, definieren +=, eine Funktion, die operator+=aufgerufen wird.
Redefinable Operatoren
Operator |
Name |
Typ |
---|---|---|
, |
Komma |
Binär |
! |
Logisches NOT |
Unär |
!= |
Ungleichheit |
Binär |
% |
Modulooperator |
Binär |
%= |
Modulo-Zuweisung |
Binär |
& |
Bitweises AND |
Binär |
& |
ADDRESS-von |
Unär |
&& |
Logisches AND |
Binär |
&= |
Bitweises AND Zuweisung |
Binär |
( ) |
Funktionsaufruf |
— |
( ) |
Umwandlungsoperator |
Unär |
* |
Multiplikation |
Binär |
* |
Dereferenzierung Zeiger |
Unär |
*= |
Multiplikations-Zuweisung |
Binär |
+ |
Addition |
Binär |
+ |
Unär positiv |
Unär |
++ |
Statuscode 1 |
Unär |
+= |
Hinzufügungs-Zuweisung |
Binär |
– |
Subtraktion |
Binär |
– |
Unäre Negation |
Unär |
–– |
Dekrement 1 |
Unär |
–= |
Subtraktions-Zuweisung |
Binär |
–> |
Memberauswahl |
Binär |
–>* |
Zeiger-zu-Member Auswahl |
Binär |
/ |
Division |
Binär |
/= |
Divisions-Zuweisung |
Binär |
< |
Kleiner als |
Binär |
<< |
Nach links verschieben |
Binär |
<<= |
Verschiebung nach links-Zuweisung |
Binär |
<= |
Kleiner oder gleich |
Binär |
= |
Zuweisung |
Binär |
== |
Gleichheit |
Binär |
> |
Größer als |
Binär |
>= |
Größer oder gleich |
Binär |
>> |
Nach rechts verschieben |
Binär |
>>= |
Verschiebung nach rechts-Zuweisung |
Binär |
[ ] |
Arrayfeldindex |
— |
^ |
Exclusive OR |
Binär |
^= |
Exclusive OR Zuweisung |
Binär |
| |
Bitweises inklusives OR |
Binär |
|= |
Bitweises inklusives OR Zuweisung |
Binär |
|| |
Logisches OR |
Binär |
~ |
Einerkomplement |
Unär |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
Konvertierungsoperatoren |
Unär |
1 zwei Versionen des unären Inkrements und Dekrementoperatoren vorhanden sind: preincrement und postincrement.
Weitere Informationen finden Sie unter Allgemeine Regeln für die Operatoren .Die Einschränkungen für verschiedene Kategorien von überladenen Operatoren werden in den folgenden Themen beschrieben:
Die Operatoren, die in der folgenden Tabelle aufgeführt sind, können nicht überladen werden.Die Tabelle schließt die Präprozessorsymbole # und ##ein.
Nonredefinable-Operatoren
Operator |
Name |
. |
Memberauswahl |
.* |
Zeiger-zu-Member Auswahl |
:: |
Bereichsauflösung |
? : |
Bedingt |
# |
Präprozessorausgabe in die Zeichenfolge bekehrter |
## |
Verkettung von Präprozessordefinitionen |
Obwohl überladene Operatoren in der Regel vom Compiler implizit aufgerufen werden, wenn sie in Code auftreten, können sie explizit aufgerufen werden, die jede Nichtmitglieds Member- oder Funktion aufgerufen wird:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Beispiel
Im folgenden Beispiel + den Operator überlädt, um zwei komplexe Zahlen hinzuzufügen und gibt das Ergebnis zurück.
// 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();
}
Output
6.8, 11.2