C++ Überladen von Operatoren und Überladen von Funktionen
C++ erlaubt, dass eine bestimmte [Funktion] im selben GültigkeitsbereichFunktionundOperatorenmehrere Definitionen angeben, die jeweils alsFunktionsüberladung bezeichnet werdenundOperatorüberladung。
Eine Überladungsdeklaration ist eine Deklaration, die denselben Namen wie eine zuvor in diesem Gültigkeitsbereich deklarierte Funktion oder Methode hat, aber ihre Parameterlisten und Definitionen (Implementierungen) sind unterschiedlich.
Wenn Sie eineüberladene Funktionoder einenüberladenen Operator aufrufen,entscheidet der Compiler, welche Definition am besten geeignet ist, indem er die von Ihnen verwendeten Parametertypen mit den Parametertypen in der Definition vergleicht. Der Prozess der Auswahl der am besten geeigneten überladenen Funktion oder des am besten geeigneten überladenen Operators heißtÜberladungsauflösung。
Funktionsüberladung in C++
Im selben Gültigkeitsbereich können Sie mehrere Funktionen mit ähnlicher Funktionalität und demselben Namen deklarieren, aber diese gleichnamigen Funktionen müssen unterschiedliche formale Parameter haben (bezogen auf Anzahl, Typ oder Reihenfolge der Parameter). Sie können Funktionen nicht allein anhand unterschiedlicher Rückgabetypen überladen.
Im folgenden Beispiel werden Funktionen mit demselben Namenprint()verwendet, um verschiedene Datentypen auszugeben:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
整数为: 5 浮点数为: 500.263 字符串为: Hello C++
Operatorüberladung in C++
Sie können die meisten in C++ integrierten Operatoren neu definieren oder überladen. Auf diese Weise können Sie Operatoren mit benutzerdefinierten Typen verwenden.
Überladene Operatoren sind Funktionen mit speziellen Namen. Der Funktionsname setzt sich aus dem Schlüsselwort `operator` gefolgt vom zu überladenden Operatorsymbol zusammen. Wie andere Funktionen hat ein überladener Operator einen Rückgabetyp und eine Parameterliste.
Box operator+(const Box&);
Deklarieren Sie den Additionsoperator, um zwei Box-Objekte zu addieren und das endgültige Box-Objekt zurückzugeben. Die meisten überladenen Operatoren können als gewöhnliche Nicht-Member-Funktionen oder als Klassenmemberfunktionen definiert werden. Wenn wir die obige Funktion als Nicht-Member-Funktion der Klasse definieren, müssen wir für jede Operation zwei Parameter übergeben, wie unten gezeigt:
Box operator+(const Box&, const Box&);
Das folgende Beispiel demonstriert das Konzept der Operatorüberladung unter Verwendung von Memberfunktionen. Hier werden Objekte als Argumente übergeben, und auf die Eigenschaften des Objekts wird mithilfe desthis-Operators zugegriffen, wie unten gezeigt:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Volume of Box1 : 210 Volume of Box2 : 1560 Volume of Box3 : 5400
Überladbare Operatoren / Nicht überladbare Operatoren
Das Folgende ist eine Liste von Operatoren, die überladen werden können:
| Binäre arithmetische Operatoren | + (Addition), - (Subtraktion), * (Multiplikation), / (Division), % (Modulo) |
| Relationale Operatoren | == (gleich), != (ungleich), < (kleiner als), > (größer als), <= (kleiner oder gleich), >= (größer oder gleich) |
| Logische Operatoren | || (logisches ODER), && (logisches UND), ! (logisches NICHT) |
| Unärer Operator | + (positiv), - (negativ), * (Dereferenzierung), & (Adressoperator) |
| Inkrement- und Dekrementoperatoren | ++ (Inkrement), -- (Dekrement) |
| Bitweise Operatoren | | (bitweises ODER), & (bitweises UND), ~ (bitweises NICHT), ^ (bitweises XOR), << (Linksverschiebung), >> (Rechtsverschiebung) |
| Zuweisungsoperatoren | =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= |
| Speicherzuweisung und -freigabe | new, delete, new[ ] , delete[] |
| Weitere Operatoren | ()(Funktionsaufruf),->(Elementzugriff),,(Komma),[](Index) |
Die folgende Liste enthält Operatoren, die nicht überladen werden können:
- .Elementzugriffsoperator
- .*, ->*Elementzeiger-Zugriffsoperator
- ::: Bereichsoperator
- sizeof: Längenoperator
- ?:: Bedingungsoperator
- #: Präprozessorsymbol
Beispiel für Operatorüberladung
Im Folgenden erhalten Sie verschiedene Beispiele für Operatorüberladung, um das Konzept der Überladung besser zu verstehen.