Operatoren überladen in C++

Was bedeutet Überladen?

In C++ ist es möglich, die existierenden Operatoren für eigene Klassen zu definieren, so dass auch selbstgeschriebene Klassen nach dem Muster

Fraction a( 1, 2 ), b( 3, 4 ), c;

c = a + b;
zu beschreiben.Man kann arithmetische Operatoren (wie +, *, ++, ...), aber auch Vergleiche (wie ==, >=, ...) und Zuweisungen( =, +=, *=, ...) für beliebige Klassen selbst definieren.
Man kann nun vorhandene Operatoren neu definieren - davon rate ich jedoch dringend ab.
Stattdessen kann man zusätzliche Operatoren definieren, so dass man beispielsweise die vorhandenen Additionen für zwei Integers, ein Integer und ein Float oder zwei Floats eine weitere Additionsbeschreibung hinzuf¨gt: zum Beispiel wie man zwei Instanzen einer eigenen Klasse 'Fraction' miteinander addiert.
Diese Form von zusätzlichen Operator-Definitionen, so dass ein Operator auch mit mit eigenen Datentypen umgehen kann, nennt man 'Überladen'.

Der Vorteil ist hier, dass der Sourcecode leserlicher werden kann, wie der zuvor gezeigte Quelltext zeigt. Gleichzeitig bedeutet die Tatsache, dass der Programmierer die Operatoren selbst definiert, dass er diszipliniert und überlegt beschreiben muss, was ein '+'-Operator zu leisten hat.
Im Falle einer Klasse Fraction erwartet man sicherlich, dass die beiden Brüche miteinander addiert werden. Der Programmierer sollte also der Namensvorgabe des Operators folgen und entsprechend dieser eine Definition schreiben, die man auch in einer Funktion Add() oder Plus() erwarten würde. Die Variable 'c' sollte also nach der Ausführung von operator + mit dem Wert 5/4 beschrieben werden.
Bei Zweideutigkeiten sollte man eindeutige Funktionsnamen vorziehen:

Vector v( 1, 2, 3 ), w( 4, 5, 6 ), r1, r2;

r1 = v.ScalarProduct( w );
r2 = v.CrossProduct( w );

Wir gehen einmal davon aus, dass Sie als verantwortungsvoller Programmierer nur dann Operatoren überladen möchten, wenn dies sinnvoll ist. Lassen Sie sich nicht dazu verleiten, alles zu überladen, was sich einem anderen Entwickler nicht sofort auf den ersten Blick erschließt. Nutzen Sie dann lieber aussagekräftige Funktionsnamen.

Wie überlade ich welchen Operator?

Folgende Operatoren gibt es in C++. Klicken Sie einfach auf den Operator, den Sie zu überladen wünschen.

Arithmetische Operatoren: +, -, *, /, %
Inkrement und Dekrement: ++(), --(), ()++, ()--
Bitmanipulierende Operatoren: |, &, ^
Shift, Im- und Export: >>, <<
Logische Operatoren: ||, &&, !, ~
Vergleichende Operatoren: ==, !=, >, >=, <=, <
Zuweisende Operatoren: =, +=, -=, *=, /=, %=, |=, &=, ^=, <<=, >>=
Index: []
Zugriff: *, ->, ->*
Functor: ()
Speichermanagement: new, new [], operator new, operator new [], delete, delete []
Datentypen: Konvertierung

m
„Wer hat eigentlich das Geld erfunden?
Und warum so wenig?“


Inhalt
Hauptseite
Unär
Binäre
Postfix
Index
Funktoren
Speichermanagement
Konvertierungen

Operatoren
Arith.: +, -, *, /, %
Inc/Dec: ++(), --(), ()++, ()--
Bits: |, &, ^
Shift/IO: >>, <<
Logisch: ||, &&, !, ~
Vergleich: ==, !=, >, >=, <=, <
Zuweisen: =, +=, -=, *=, /=, %=, |=, &=, ^=, <<=, >>=
Index: []
Zugriff: *, ->, ->*
Functor: ()
Speicher: new, new [], operator new, operator new [], delete, delete []
Datentyp: Konvertierung