Was ist der Sinn hinter dem Überladen von Operatoren in C++ und wie funktioniert das genau?

1 Antwort

Von Experte Palladin007 bestätigt

Operator Overloading dient eben dazu bestimmte Operatoren für einen Datentyp eigen zu definieren.

ZB macht es keinen Sinn zwei Strings mathematisch zu addieren, aber man kann zB den Additionsoperator überladen und damit das Zusammenfügen der Strings erreichen.

Also str1="Hello " str2="World" dann ist str1 + str2 = "Hello World".

Für Vektoren gilt natürlich das selbe. Der Compiler weiß ja zunächst nicht was der + oder - Operator bei bestimmten Klassen machen soll, mittels overloading definiert man das eben.

Ob du einen Operator unär oder binär überlädst hängt davon ab ob du ihn für eine Klasse definierst oder in einer Klasse. In einer Klasse ists klar, dass ein Argument immer this sein wird. Außerhalb einer Klasse muss dieser natürlich zwei Argumente haben.


Valentin1720653 
Fragesteller
 03.01.2022, 17:55

Achsoo, das macht irgendwie Sinn...

Nehmen wir an ich definiere mir einen Datentyp Vektor mit dem ich Vektoren darstellen möchte. Diese bestehen ja immer aus x1 x2 x3 bzw aus x y und z. Definiere ich mir jetzt 2 Vektoren und möchte diese zusammenrechnen, dann kann ich das zunächst über den normalen + Operator nicht tun, da dieser normal nur für Zahlen funktioniert.

Was ich jetzt machen kann, ich nehme den Operator und Überlade ihn für den Datentyp Vektor einzeln, dann kann ich dem Operator zuweisen was er bei der Addition von 2 Vektoren zu tun hat. Ich schreibe also eine Funktion wo definiert wird was bei der Vektoraddition zu tun ist und schreibe in diese operator+ rein, und gebe dann einen Vektor vom Datentyp Vektor zurück. Damit habe ich definiert wie die Vektoraddition genau funktioniert, und ab dann kann ich den Operator auch für den Datentyp bzw. meine Klasse Vektor anwenden.

Kommt das so hin ? :)

0
PeterKremsner  03.01.2022, 18:18
@Valentin1720653

Ja das ist richtig. Das selbe gilt natürlich auch für viele andere Operatoren.

Typisches Beispiel ist zB auch der Bitshift Operator bei Streams also cout << 2; Da cout ein Stream ist wird diese Operation mit der Ausgabe und Umwandelung des int 2 in den string 2 überladen.

0