c++-newbie: wieso operatoren überladen?

C-H

Erfahrenes Mitglied
Hi!

Ich arbeite mich gerade in C++ ein und stolpere über die Möglichkeit Operatoren zu überladen. Kann mir jemand Newbie-freundlich erklären wozu das gut ist?
 
Hi.

Das Überladen von Operatoren (Funktionen, Konstruktoren, Methoden) ist ein sehr nützliches Konzept was wir eigentlich auch schon nutzen seit wir in der 1. bzw. 2. Klasse Mathematik gelehrt bekamen.

Auf Operatoren bezogen benutzen wir einfach ein bestimmtes Symbol welches laut Vereinbarung für eine bestimmte Operation steht. Z.B. das "Plus" wird gerne als Symbol für die Addition benutzt und jeder weiß: aha, jetzt muß ich was addieren.

Jetzt kommt es allerdings noch auf die Operanden an. Es kommt darauf an "wie" diese Addition ausgeführt (z.B. mit welcher Methode: im Kopf, schriftlich mit Untereinanderschreiben, schriftlich mit Kommazahlen usw.). Das hängt eben davon ab (neben den persönlichen Vorlieben) von welcher Art (von welchem Typ) die Operanden sind.

Man kann aber das "Plus" z.B. auch ganz anders nutzen. Z.B. mit Wörtern:

Schlag + sahne = Schlagsahne

Oder ein anderes bekanntes Symbol:

hammer * 3 = hammerhammerhammer

Es wird wohl niemand annehmen, das hier Addiert bzw. Multipliziert wurde im herkömmlichen Sinne. Im vorletzten Beispiel wurde das "Plus" als "Aneinanderhängen" (Verketten) von Wörtern verstanden - nicht als Addition (das "Plus" bzw. der operator+ ist übrigens in C++ für die Klasse std::string genau so überladen). Das "Sternchen" als n-faches Hintereinanderschreiben eines Wortes.

Das heißt also das die Operation die wir mit einem bestimmten Symbol verbinden abhängig von den Operanden ist.

Genau deshalb ist es möglich in C++ Operatoren zu überladen. Das ist keine Erfindung extra für C++ sondern wurde als Konzept einfach übernommen.

Man kann sich dann selbst ausdenken, was das "Plus" für eine Operation ausführen soll in Bezug auf seine eigene Klasse.

Es gibt übrigens streng typsichere Sprachen in denen es nicht möglich ist Operatoren zu überladen (auch die Standardoperatoren nicht). Da muß man dann z.B. um mit Gleitkommazahlen zu rechnen auch einen Gleitkommaoperator benutzen. Das sieht dann so aus:
Code:
3 + 5  # <= eine Integer-Addition mit "Plus"
3.5 +. 5.8 # <= eine Gleitkomma-Addition mit "Plus-Punkt"
Der Compiler sucht sich hier eben nicht die richtige Operation anhand der Operanden heraus sondern das muß der Programmierer tun. Der C++ Compiler hingegen wird die bestgeeignetste Operation für die Operanden automatisch bestimmen (soweit wie möglich).

Gruß
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück