Überladen von OperatorenOperator overloading

Das Operator Schlüsselwort deklariert eine Funktion, die angibt, welches Operator-Symbol bei der Anwendung auf Instanzen einer Klasse bedeutet.The operator keyword declares a function specifying what operator-symbol means when applied to instances of a class. Dadurch erhält der Operator mehrere Bedeutungen, oder er wird "überladen".This gives the operator more than one meaning, or "overloads" it. Der Compiler unterscheidet zwischen verschiedenen Bedeutungen eines Operators, indem er die Typen seiner Operanden überprüft.The compiler distinguishes between the different meanings of an operator by examining the types of its operands.

SyntaxSyntax

Type Operator Operator-Symbol ( Parameterliste )type operator operator-symbol ( parameter-list )

BemerkungenRemarks

Sie können die Funktion der meisten integrierten Operatoren global oder klassenweise neu definieren.You can redefine the function of most built-in operators globally or on a class-by-class basis. Überladene Operatoren werden als Funktionen implementiert.Overloaded operators are implemented as functions.

Der Name eines überladenen Operators ist Operator x, wobei x der Operator ist, wie er in der folgenden Tabelle angezeigt wird.The name of an overloaded operator is operator x, where x is the operator as it appears in the following table. Wenn Sie z. b. den Additions Operator überladen möchten, definieren Sie eine Funktion mit dem Namen Operator + .For example, to overload the addition operator, you define a function called operator+. Um den Additions-/Zuweisungs Operator += zu überladen, definieren Sie eine Funktion mit dem Namen Operator + = .Similarly, to overload the addition/assignment operator, +=, define a function called operator+=.

Neu definierbare OperatorenRedefinable Operators

OperatorOperator NameName typeType
,, KommaComma BinaryBinary
!! Logisches NOTLogical NOT UnäroperatorenUnary
!=!= UngleichheitInequality BinaryBinary
% ModulusModulus BinaryBinary
%= ModulozuweisungModulus assignment BinaryBinary
& Bitweises ANDBitwise AND BinaryBinary
& Address-ofAddress-of UnäroperatorenUnary
&& Logisches ANDLogical AND BinaryBinary
&= Bitweise AND-ZuweisungBitwise AND assignment BinaryBinary
( )( ) FunktionsaufrufFunction call
( )( ) UmwandlungsoperatorCast Operator UnäroperatorenUnary
** MultiplikationMultiplication BinaryBinary
** Zeiger-DereferenzierungPointer dereference UnäroperatorenUnary
*=*= MultiplikationszuweisungMultiplication assignment BinaryBinary
+ AdditionAddition BinaryBinary
+ Unäres PlusUnary Plus UnäroperatorenUnary
++ 1 InkrementIncrement 1 UnäroperatorenUnary
+= AdditionszuweisungAddition assignment BinaryBinary
- SubtraktionSubtraction BinaryBinary
- Unäre NegationUnary negation UnäroperatorenUnary
-- Dekrement 1Decrement 1 UnäroperatorenUnary
-= SubtraktionszuweisungSubtraction assignment BinaryBinary
-> MemberauswahlMember selection BinaryBinary
->*->* Pointer-to-member-AuswahlPointer-to-member selection BinaryBinary
/ DivisionDivision BinaryBinary
/= DivisionszuweisungDivision assignment BinaryBinary
< Kleiner alsLess than BinaryBinary
<< Nach links verschiebenLeft shift BinaryBinary
<<= LinksschiebezuweisungLeft shift assignment BinaryBinary
<= Kleiner als oder gleichLess than or equal to BinaryBinary
= ZuweisungAssignment BinaryBinary
== GleichheitEquality BinaryBinary
> Größer alsGreater than BinaryBinary
>= Größer als oder gleichGreater than or equal to BinaryBinary
>> Nach rechts verschiebenRight shift BinaryBinary
>>= RechtsschiebezuweisungRight shift assignment BinaryBinary
[ ][ ] Array-SubscriptArray subscript
^ Exklusives ORExclusive OR BinaryBinary
^= Exklusive OR-ZuweisungExclusive OR assignment BinaryBinary
|| Bitweises inklusives ORBitwise inclusive OR BinaryBinary
|=|= Bitweise inklusive OR-ZuweisungBitwise inclusive OR assignment BinaryBinary
|||| Logisches ORLogical OR BinaryBinary
~ EinerkomplementOne's complement UnäroperatorenUnary
deletedelete LöschenDelete
Neunew NeuNew
Konvertierungsoperatorenconversion operators Konvertierungsoperatorenconversion operators UnäroperatorenUnary

1 es sind zwei Versionen der unären Inkrement-und Dekrementoperatoren vorhanden: "Preincrement" und "postincrement".1 Two versions of the unary increment and decrement operators exist: preincrement and postincrement.

Weitere Informationen finden Sie unter Allgemeine Regeln für die Überladung von Operatoren .See General Rules for Operator Overloading for more information. Die Einschränkungen für die verschiedenen Kategorien von überladenen Operatoren werden in den folgenden Themen beschrieben:The constraints on the various categories of overloaded operators are described in the following topics:

Die Operatoren, die in der folgenden Tabelle aufgeführt sind, können nicht überladen werden.The operators shown in the following table cannot be overloaded. Die Tabelle enthält die Präprozessorsymbole # und ## .The table includes the preprocessor symbols # and ##.

Nicht neu definierbare OperatorenNonredefinable Operators

OperatorOperator NameName
.. MemberauswahlMember selection
.*.* Pointer-to-member-AuswahlPointer-to-member selection
:::: BereichsauflösungScope resolution
? :? : BedingtConditional
# Präprozessorkonvertierung in ZeichenfolgePreprocessor convert to string
## PräprozessorverkettungPreprocessor concatenate

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:Although overloaded operators are usually called implicitly by the compiler when they are encountered in code, they can be invoked explicitly the same way as any member or nonmember function is called:

Point pt;
pt.operator+( 3 );  // Call addition operator to add 3 to pt.

BeispielExample

Im folgenden Beispiel wird der + -Operator überladen, um zwei komplexe Zahlen hinzuzufügen und das Ergebnis zurückzugeben.The following example overloads the + operator to add two complex numbers and returns the result.

// 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 AbschnittIn this section

Weitere InformationenSee also

C++-Built-in-Operatoren, Rangfolge und AssoziativitätC++ Built-in Operators, Precedence and Associativity
SchlüsselwörterKeywords