Ü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

Siehe auch

Referenz

C++-Operatoren

C++-Schlüsselwörter