====== Unäre Prefix-Operatoren ======
Unäre Operatoren besitzen lediglich ein Argument, sie stehen also nicht wie die [[infix|Infixoperatoren]] zwischen zwei Werten, sondern vor (Präfix-Operator) oder nach ([[postfix|Postfix-Operator]]) einem Argument.
Hier einige Beispiele:
int a;
int *pa = &a; // Prefix
int ia = ~a; // Prefix
++a; // Prefix
a++; // Postfix
Es gibt zwei Möglichkeiten einen Prefix-Operator zu überladen:
* Definition innerhalb der betreffenden Klasse
* als globale Definition
Bei der ersten Möglichkeit sehe ich den zusätzlichen Vorteil, dass sich die Operatordefintion leicht in den Quelltexten wiederfinden lässt.
===== Operatordefinition innerhalb der Klasse =====
Bei folgendem Beispiel wird der ++ Prefix-Operator überladen.
class Fraction
{
private:
int numerator;
int denumerator;
public:
Fraction & operator ++( void );
};
Fraction & Fraction::operator ++( void )
{
numerator += denumerator;
return *this;
}
Nun ist es möglich, die Klasse 'Fraction' mittels
Fraction f;
++f;
durchzuzählen. Selbstverständlich besteht auch die Möglichkeit, solche einfachen Operatoren direkt inline in die Klassendeklaration ins Headerfile zu schreiben.
===== Globale Operatordefintion =====
Das gleiche Beispiel wie zuvor nun noch einmal. Da wir uns nun nicht mehr innerhalb einer Klasse befinden, können wir den this-Pointer nicht mehr verwenden. Stattdessen lassen wir uns die Referenz auf das Objekt einfach übergeben. Müssen wir auf durch 'privat' oder 'protected' geschützte Daten zugreifen, so muss der Operator als '[[cpp:class:friend|friend]]' definiert werden.
class Fraction
{
friend Fraction & operator ++( Fraction & );
private:
int numerator;
int denumerator;
};
Fraction & operator ++( Fraction & f )
{
f.numerator += f.denumerator;
return f;
}
Das Resultat ist gleichwertig.
Nach diesem Muster lassen sich alle unären Prefix-Operatoren überladen.
In C++ sind nahezu alle unären Operatoren Präfix-Operatoren, doch keine Regel ohne Ausnahme: Für die Inkrement, bzw. Dekrement-Operatoren gibt es daher eine eigene Seite, die die Besonderheiten der [[postfix|Postfix-Varianten]] beschreibt.