Freigeben über


Überladen von Operatoren

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.

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 operatorx, 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 Additionszuweisungsoperators += eine Funktion mit dem Namen operator+=.

Neu definierbare Operatoren

Operator

Name

Typ

,

Komma

Binär

!

Logisches NOT

Unär

!=

Ungleichheit

Binär

%

Modulooperator

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

+

Addition

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

/

Division

Binär

/=

Divisionszuweisung

Binär

<

Kleiner als

Binär

<<

Nach links verschieben

Binär

<<=

Linksschiebezuweisung

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

>>=

Rechtsschiebezuweisung

Binär

[ ]

Arrayfeldindex

^

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

Delete

new

New

conversion operators

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();
}

Ausgabe

6.8, 11.2

Siehe auch

Referenz

C++-Operatoren

C++-Schlüsselwörter