Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das operator
-Schlüsselwort deklariert eine Funktion, die angibt, welche Bedeutung operator-symbol bei der Anwendung auf Instanzen einer Klasse hat. Dadurch erhält der Operator mehrere Bedeutungen, oder er wird "überladen". Der Compiler unterscheidet zwischen verschiedenen Bedeutungen eines Operators, indem er die Typen seiner Operanden überprüft.
Syntax
type
operator
operator-symbol ( parameter-list )
Hinweise
Sie können die Funktion der meisten integrierten Operatoren global oder klassenweise neu definieren. Überladene Operatoren werden als Funktionen implementiert.
Der Name eines überladenen Operators ist operator
x, wobei x der Operator ist, wie in der folgenden Tabelle dargestellt. Um beispielsweise den Additionsoperator zu überladen, definieren Sie eine Funktion mit dem Namen operator+. Ebenso definieren Sie zum Überladen des Additions-/Zuweisungsoperators, +=, eine Funktion mit dem Namen operator+=.
Neu definierbare Operatoren
Operator | Name | type |
---|---|---|
, | Komma | Binär |
! | Logisches NOT | Unär |
!= | Ungleichheit | Binär |
% | Modulo | Binär |
%= | Modulozuweisung | Binär |
& | Bitweises AND | Binär |
& | Address-of | Unär |
&& | Logisches AND | Binär |
&= | Bitweise AND-Zuweisung | Binär |
( ) | Funktionsaufruf | — |
( ) | Umwandlungsoperator | Unär |
* |
Multiplikation | Binär |
* |
Zeiger-Dereferenzierung | Unär |
*= |
Multiplikationszuweisung | Binär |
+ | Hinzufügung | Binär |
+ | Unäres Plus | Unär |
++ | Increment 1 | Unär |
+= | Additionszuweisung | Binär |
- | Subtraktion | Binär |
- | Unäre Negation | Unär |
-- | Decrement 1 | Unär |
-= | Subtraktionszuweisung | Binär |
-> | Memberauswahl | Binär |
->* |
Pointer-to-member-Auswahl | Binär |
/ | Geschäftsbereich | Binär |
/= | Divisionszuweisung | Binär |
< | Kleiner als | Binär |
<< | Verschiebung nach links | Binär |
<<= | Linksschiebezuweisung | Binär |
<= | Kleiner als oder gleich | Binär |
= | Zuweisung | Binär |
== | Gleichheit | Binär |
> | Größer als | Binär |
>= | Größer als oder gleich | Binär |
>> | Verschiebung nach rechts | Binär |
>>= | Rechtsschiebezuweisung | Binär |
[ ] | Array-Subscript | — |
^ | Exklusives OR | Binär |
^= | Exklusive OR-Zuweisung | Binär |
| | Bitweises inklusives OR | Binär |
|= | Bitweise inklusive OR-Zuweisung | Binär |
|| | Logisches OR | Binär |
~ | Einerkomplement | Unär |
delete |
Löschen | — |
new |
Neue | — |
Konvertierungsoperatoren | Konvertierungsoperatoren | Unär |
1 Es gibt zwei Versionen der unären Inkrement- und Dekrementoperatoren: preincrement und postincrement.
Weitere Informationen finden Sie unter Allgemeine Regeln für die Überladung von Operatoren. Die Einschränkungen für die verschiedenen 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 enthält die Präprozessorsymbole # und ##.
Nicht neu definierbare Operatoren
Operator | Name |
---|---|
. | Memberauswahl |
.* |
Pointer-to-member-Auswahl |
:: | Bereichsauflösung |
? : | Bedingt |
# | Präprozessorkonvertierung in Zeichenfolge |
## | Präprozessorverkettung |
Obwohl überladene Operatoren in der Regel vom Compiler implizit aufgerufen werden, wenn sie im Code auftreten, können sie explizit auf dieselbe Art und Weise aufgerufen werden, wie andere Member- oder Nichtmemberfunktionen aufgerufen werden:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Beispiel
Im folgenden Beispiel wird der +-Operator überladen, um zwei komplexe Zahlen hinzuzufügen, und das Ergebnis wird zurückgegeben.
// 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
In diesem Abschnitt
Weitere Informationen
Integrierte C++-Operatoren, Rangfolge und Assoziativität
Schlüsselwörter