C++ Overloading: Funktionen & Operatoren erklärt
C++ erlaubt mehrere Definitionen für denselben Funktionsnamen oder Operator im selben Scope – Funktionsüberladung und Operatorüberladung.
Eine überladene Deklaration hat denselben Namen wie eine vorherige, aber unterschiedliche Parameter (Typ/Anzahl). Rückgabetyp allein reicht nicht für Überladung.
Bei Aufruf wählt Compiler die passendste Definition basierend auf Argumenttypen – Overload Resolution.
Funktionsüberladung
Mehrere Definitionen desselben Funktionsnamens im selben Scope. Unterscheidung über Typen/Anzahl der Parameter. Nicht über Rückgabetyp allein.
#include <iostream>
using namespace std;
class printData {
public:
void print(int i) { cout << "Printing int: " << i << endl; }
void print(double f) { cout << "Printing float: " << f << endl; }
void print(char* c) { cout << "Printing character: " << c << endl; }
};
int main() {
printData pd;
pd.print(5);
pd.print(500.263);
pd.print("Hello C++");
return 0;
}
Ausgabe:
Printing int: 5
Printing float: 500.263
Printing character: Hello C++
Operatorüberladung
Die meisten eingebauten Operatoren können für benutzerdefinierte Typen neu definiert werden. Überladene Operatoren sind Funktionen mit speziellen Namen: operator + Symbol (z. B. operator+). Haben Rückgabetyp und Parameterliste.
Box operator+(const Box&); // Member-Funktion: this + Argument
Als Non-Member-Funktion zwei Argumente:
Box operator+(const Box&, const Box&);
Beispiel: Box-Addition
#include <iostream>
using namespace std;
class Box {
public:
double getVolume() { return length * breadth * height; }
void setLength(double len) { length = len; }
void setBreadth(double bre) { breadth = bre; }
void setHeight(double hei) { height = hei; }
// + Operator überladen
Box operator+(const Box& b) {
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
private:
double length, breadth, height;
};
int main() {
Box Box1, Box2, Box3;
Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0);
Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0);
cout << "Volume Box1: " << Box1.getVolume() << endl; // 210
cout << "Volume Box2: " << Box2.getVolume() << endl; // 1560
Box3 = Box1 + Box2; // Operator+ Aufruf
cout << "Volume Box3: " << Box3.getVolume() << endl; // 5400
return 0;
}
Überladbare / Nicht überladbare Operatoren
Überladbar:
| + | - | * | / | % | ^ |
| & | | | ~ | ! | , | = |
| < | > | <= | >= | ++ | -- |
| << | >> | == | != | && | || |
| += | -= | /= | %= | ^= | &= |
| |= | *= | <<= | >>= | [] | () |
| -> | ->* | new | new[] | delete | delete[] |
NICHT überladbar:
| :: | .* | . | ?: |
Operatorüberladungs-Beispiele (Übersicht)
| Nr. | Beispiel |
|---|---|
| 1 | Unäre Operatoren |
| 2 | Binäre Operatoren |
| 3 | Relationale Operatoren |
| 4 | Ein-/Ausgabe-Operatoren (<<, >>) |
| 5 | ++ und -- |
| 6 | Zuweisungsoperatoren |
| 7 | Funktionsaufruf () |
| 8 | Subscript [] |
| 9 | Member Access -> |
C Sprache
- Arrays an Funktionen in C++ übergeben: Ein praktischer Leitfaden
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Speicherverwaltung meistern: Experten-Einsatz von new und delete
- C++ Vererbung: Public, Protected & Private erklärt
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- C-Structs: Übergeben, Zurückgeben & Referenz-Handling meistern
- Operator Overloading in Python meistern: Ein praktischer Leitfaden
- C++ Operatoren erklärt: Typen, Beispiele und Beispielprogramme
- C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
- C++-Funktionen erklärt: Mit praktischen Code-Beispielen