Überladen von Operatoren

Die operator Schlüsselwort (keyword) deklariert eine Funktion, die angibt, welche Operatorsymbole bedeutet, wenn sie auf Instanzen einer Klasse angewendet werden. 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

typeoperatoroperator-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 operatorx, wobei x der Operator ist, wie er in der folgenden Tabelle angezeigt wird. Um beispielsweise den Additionsoperator zu überladen, definieren Sie eine Funktion namens "operator+". Ebenso definieren Sie eine Funktion namens operator+=, +=um den Additions-/Zuordnungsoperator zu überladen.

Neu definierbare Operatoren

Operator Name Typ
, Komma Binary
! Logisches NOT Unär
!= Ungleichheit Binary
% Modulo Binary
%= Modulozuweisung Binary
& Bitweises AND Binary
& Address-of Unär
&& Logisches AND Binary
&= Bitweise AND-Zuweisung Binary
( ) Funktionsaufrufe
( ) Umwandlungsoperator Unär
* Multiplikation Binary
* Zeiger-Dereferenzierung Unär
*= Multiplikationszuweisung Binary
+ Hinzufügung Binary
+ Unäres Plus Unär
++ Inkrementierung 1 Unär
+= Additionszuweisung Binary
- Subtraktion Binary
- Unäre Negation Unär
-- Erhöhen von 1 Unär
-= Subtraktionszuweisung Binary
-> Memberauswahl Binary
->* Pointer-to-member-Auswahl Binary
/ Geschäftsbereich Binary
/= Divisionszuweisung Binary
< Kleiner als Binary
<< Verschiebung nach links Binary
<<= Linksschiebezuweisung Binary
<= Kleiner als oder gleich Binary
= Abtretung Binary
== Gleichheit Binary
> Größer als Binary
>= Größer als oder gleich Binary
>> Verschiebung nach rechts Binary
>>= Rechtsschiebezuweisung Binary
[ ] Array-Subscript
^ Exklusives OR Binary
^= Exklusive OR-Zuweisung Binary
| Bitweises inklusives OR Binary
|= Bitweise inklusive OR-Zuweisung Binary
|| Logisches OR Binary
~ Einerkomplement Unär
delete Löschen
new Neue
Konvertierungsoperatoren Konvertierungsoperatoren Unär

1 Zwei Versionen der unären Inkrementierungs- und Dekrementoperatoren sind vorhanden: Preincrement und Postincrement.

Weitere Informationen finden Sie unter "Allgemeine Regeln für Operatorüberladungen ". 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 zurückzugeben.

// 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

Siehe auch

Integrierte C++-Operatoren, Rangfolge und Assoziativität
Schlüsselwörter