C-Programmierung

Ãœberladen von Operatoren

Deep Copy | | Operatorliste

Operatoren sind unter C++ nichts anderes als eine abgekürzte Schreibweise für den Aufruf einer entsprechenden Funktion, z.B. ist der Operator + eine Abkürzung für die Funktion add(…):

z.B.: 1 + 1 ←→ add(1, 1)
z.B.: 2.0 + 3.0 ←→ add(2.0, 3.0)

Die Funktion add(…) ist überladen, weil es verschiedene Implementierungsvarianten für die verschiedensten Parametertypen int, double etc. gibt:

int add(int a, int b);
double add(double a, double b);
...

Funktionen wie add() können beliebig überladen werden, d.h. man kann eine überladene Variante für die komplexen Zahlen definieren:

Wir brauchen dazu eine Funktion add() mit zwei komplexen Operanden.

Complex add(Complex a, Complex b)
{
   return(Complex(a.re+b.re, a.im+b.im));
}

Dann kann man schreiben:

Complex z1(0,1), z2(0,-1);
Complex r = add(z1, z2);

Im Umkehrschluss gilt aber auch, dass man Operatoren in C++ beliebig überladen kann, da sie nur eine abgekürzte Schreibweise fuer überladbare Funktionen darstellen.

Der + Operator arbeitet normalerweise mit Ganzzahl- oder Fließkommazahlen. D.h. es gibt überladene globale Operator-Funktionen die der Addition der jeweiligen Operandentypen entsprechen:

int operator + (int a, int b);
double operator + (double a, double b);

Selbiges gilt für alle arithmetischen Operatoren wie + - * / += etc.

Nun wäre es wünschenswert, auch zwei komplexe Zahlen mit dem + Operator addieren zu können.

Complex z1(0,1), z2(0,-1);
Complex r = z1 + z2;

Dazu ist es erforderlich den + Operator für die komplexen Zahlen zu überladen:

Complex operator + (Complex a, Complex b)
{
   return(Complex(a.re+b.re, a.im+b.im));
}

Dann schreibt man:

Complex r = z1 + z2;

anstelle von

Complex r = add(z1, z2);

Ersteres ist die sog. Infix Notation (“Dazwischen-Schreibweise”)- letzteres die Prefix Notation (“Davor-Schreibweise”).

Deep Copy | | Operatorliste

Options: