Operator-Funktionen (Syntax)
Hinter einem Operator verbirgt sich im Endeffekt nichts weiter als eine Elementfunktion
einer Klasse. Die Operatoren beziehen sich also immer auf eine bestimmte Klasse und
müssen -- damit sie für eine Klasse zur Verfügung stehen -- zunächst
implementiert werden.
Bevor wir uns in diesem Abschnitt etwas ausführlicher mit der Technik
des Überladens beschäftigen werden, zu Beginn noch einmal eine
Übersicht über alle Operatoren, die uns
zum Überladen zur Verfügung stehen:
+ |
- |
* |
/ |
% |
^ |
& |
| |
~ |
! |
= |
< |
> |
+= |
-= |
*= |
/= |
%= |
^= |
&= |
|= |
<< |
>> |
>>= |
<<= |
== |
!= |
<= |
>= |
&& |
|| |
++ |
-- |
->* |
, |
-> |
[] |
() |
new |
delete |
Ganz allgemein wird dabei zwischen unären, binären und
ternären
Operatoren unterschieden (vgl. hierzu Kapitel 3: Arithmetische
Ausdrücke
).
Diese Unterscheidung der Operatoren ist auch für das Überladen von Interesse,
da man diese nämlich nicht abändern kann. Zwar ist es möglich, einem
Operator für die eigene Klasse eine (fast) beliebige Funktionalität
zuzuweisen, eine Veränderung der Anzahl der Operanden ist jedoch nicht
zulässig (vgl. hierzu Grundsätzlich ist beim Überladen
Folgendes zu beachten
).
Mit einigen dieser Operatoren werden wir uns in eigenen Unterabschnitten
in diesem Kapitel beschäftigen. Zunächst geht es jedoch erst
einmal um die Technik im allgemeinen.
Die Operatoren einer Klasse werden innerhalb der Klassendefinition
über das Schlüsselwort operator
definiert.
Am besten betrachten wir gleich ein Beispiel (hier: Beispielklasse
complex
), da das Vorgehen dann einsichtiger wird.