C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
Was ist Operator‑Overloading?
Mithilfe von Operator‑Overloading in C++ können Sie einem Operator innerhalb desselben Gültigkeitsbereichs mehrere Bedeutungen zuweisen. Ziel ist es, einem Operator für einen benutzerdefinierten Typ ein individuelles Verhalten zu geben.
Durch Operator‑Overloading können Sie die meisten C++‑Operatoren neu definieren und unterschiedliche Operationen mit einem einzigen Symbol durchführen.
In diesem Tutorial lernen Sie:
- Was Operator‑Overloading ist
- Syntax
- Verschiedene Ansätze zum Overloading in C++
- Welche Operatoren nicht überladen werden können
- Wichtige Überlegungen
- Regeln für Operator‑Overloading
- Wie man einen Operator in der Praxis überlädt
Syntax
Um einen C++‑Operator zu überladen, definieren Sie eine spezielle Member‑Funktion innerhalb einer Klasse wie folgt:
class klassen_name {
...
public:
rueckgabetyp operator symbol (parameter) {
...
}
...
};
Die Bestandteile sind:
- rueckgabetyp – der von der Operator‑Funktion zurückgegebene Typ.
- operator – das Schlüsselwort, das die Deklaration einleitet.
- symbol – der zu überladende Operator, z. B.
+,-,<,++. - parameter – Parameter wie bei jeder anderen Funktion.
Beispiel 1:
#include <iostream>
using namespace std;
class TestClass {
private:
int count;
public:
TestClass() : count(5) {}
void operator --() {
count = count - 3;
}
void Display() {
cout << "Count: " << count;
}
};
int main() {
TestClass tc;
--tc;
tc.Display();
return 0;
}
Ausgabe:

Screenshot des Codes:

Code‑Erklärung:
<iostream>für I/O einbinden.std‑Namespace für Kürze.- Klasse
TestClassdefinieren. countals privates Datenelement.- Öffentlicher Konstruktor initialisiert
countmit 5. - Präfix‑
--Operator überladen, um 3 voncountabzuziehen. Display()implementieren, um aktuellen Wert auszugeben.- In
main()Instanz erzeugen, überladenen Operator anwenden, Ergebnis anzeigen.
Verschiedene Ansätze zum Operator‑Overloading in C++
Overloading kann erreicht werden durch:
- Member‑Funktionen
- Nicht‑Member‑Funktionen (Friend‑ oder freie Funktionen)
- Friend‑Funktionen (wenn Zugriff auf private Daten nötig)
- Ist der linke Operand ein Objekt der Klasse, wird typischerweise eine Member‑Funktion verwendet.
- Ist der linke Operand eines anderen Typs, ist eine Nicht‑Member‑Funktion erforderlich.
- Friend‑Funktionen sind nützlich, wenn der Operator auf private/geschützte Member zugreifen muss.
Können alle C++‑Operatoren überladen werden?
Nein. Folgende Operatoren sind nicht überladbar:
::– Scope‑Resolution?:– Ternärer Bedingungsoperator.– Member‑Zugriffsizeof– Größenabfrage*(Member‑Pointer‑Selektor)
Wichtige Hinweise
- Overloading betrifft nur benutzerdefinierte Typen; eingebaute Typen behalten ihr ursprüngliches Verhalten.
- Zuweisungs‑(
=) und Adress‑Operator (&) werden automatisch für Klassen überladen, die Kopierkonstruktor oder Zuweisungsoperator bereitstellen. - Operator‑Priorität bleibt unverändert; Klammern können die Auswertungsreihenfolge erzwingen.
- Drei Operatoren –
::,.,?:– sind explizit vom Overloading ausgeschlossen.
Regeln für Operator‑Overloading
- Mindestens ein Operand muss ein benutzerdefinierter Klassentyp sein.
- Nur existierende Operatoren können überladen werden; neue Operatorsymbole können nicht eingeführt werden.
- Einige Operatoren (z. B.
new,delete) können nicht als Friend‑Funktionen, wohl aber als Member‑Funktionen überladen werden.
Einen Operator überladen – Schritt für Schritt
Beispiel 1: Inkrement‑Operator
#include <iostream>
using namespace std;
class OperatorOverload {
private:
int x;
public:
OperatorOverload() : x(10) {}
void operator ++() {
x += 2;
}
void Print() {
cout << "The Count is: " << x;
}
};
int main() {
OperatorOverload ov;
++ov;
ov.Print();
return 0;
}
Ausgabe:

Screenshot des Codes:

Code‑Erklärung:
<iostream>undstd‑Namespace.- Klasse
OperatorOverloadmit privatemint x. - Konstruktor initialisiert
xmit 10. - Präfix‑
++überladen, um 2 zuxaddieren. Print()zum Anzeigen des aktualisierten Werts.- In
main()Objekt erzeugen, überladenen Operator aufrufen, Ergebnis drucken.
Beispiel 2: Addition komplexer Zahlen
#include <iostream>
using namespace std;
class TestClass {
private:
int real, over;
public:
TestClass(int rl = 0, int ov = 0) : real(rl), over(ov) {}
TestClass operator + (TestClass const &obj) {
TestClass result;
result.real = real + obj.real;
result.over = over + obj.over;
return result;
}
void print() {
cout << real << " + i" << over << endl;
}
};
int main() {
TestClass c1(9, 5), c2(4, 3);
TestClass c3 = c1 + c2;
c3.print();
}
Ausgabe:

Screenshot des Codes:

Code‑Erklärung:
<iostream>undstd‑Namespace.TestClassmitrealundoverKomponenten.- Konstruktor für Initialisierung.
+Operator überladen für komplexe Addition.- Neue
TestClass‑Instanz mit Summe zurückgeben. print()zur Anzeige der komplexen Zahl.- In
main()zwei Instanzen erzeugen, addieren, Ergebnis drucken.
Zusammenfassung
- Operator‑Overloading erlaubt mehrere Bedeutungen für einen Operator in einem Gültigkeitsbereich.
- Es bietet benutzerdefiniertes Verhalten für benutzerdefinierte Typen.
- Die meisten C++‑Operatoren können überladen werden, aber einige nicht.
- Mindestens ein Operand muss ein benutzerdefinierter Typ sein.
- Nur existierende Operatoren sind überladbar.
C Sprache
- Arrays an Funktionen in C++ übergeben: Ein praktischer Leitfaden
- Operator Overloading in Python meistern: Ein praktischer Leitfaden
- C++ Operatoren erklärt: Typen, Beispiele und Beispielprogramme
- C++ do‑while‑Schleife: Syntax, Praxisbeispiele und verschachtelte Schleifen
- C++ Zeiger meistern: Konzepte, Beispiele & praktische Anwendungen
- C++ char‑Datentyp meistern: Deklaration, ASCII & Konvertierungstechniken
- C++ Structs erklärt mit praktischem Beispiel
- std::list in C++ meistern: Syntax, Funktionen & praktische Beispiele
- C++-Funktionen erklärt: Mit praktischen Code-Beispielen
- Python Lambda-Funktionen meistern: Praxisbeispiele & Best Practices