Eine Operatorfunktion (kurz: Operator) ist nichts anderes als eine Funktion mit einem Parameter
(unärer Operator) oder zwei Parametern (binärer Operator).
Sie erhält zusätzlich das Schlüsselwort operator.
Ihr Aufruf kann anders notiert werden als es bei üblichen Funktionen geschieht, und zwar in der Struktur:
Prinzip | Beispiel |
Operator Operand (bei unärem Operator) |
!x<5 // <=> operator!(x<5) |
Operand1 Operator Operand2 (bei binärem Operator) |
x + y // <=> operator+(x,y) |
"<=>" bedeutet "ist äquivalent mit", was hier soviel heißt wie
"wirkt genauso wie".
Denken Sie z.B. auch an die binären Operatoren *, /, %:
Wir schreiben a * b, was gleichbedeutend ist mit operator*(a,b).
Es folgt ein kurzes Beispiel mit einer Operatorfunktion zur komplexen Addition.
#include <iostream>
using namespace std;
typedef struct {double Re, Im;} TComplex;
TComplex add(const TComplex& z1, const TComplex& z2)
{TComplex z;
z.Re = z1.Re + z2.Re;
z.Im = z1.Im + z2.Im;
return z;
}
TComplex operator + (const TComplex& z1, const TComplex& z2)
{TComplex z;
z.Re = z1.Re + z2.Re;
z.Im = z1.Im + z2.Im;
return z;
}
int main()
{
TComplex U1={12,7}, U2={5,9}, Ug;
cout << "Demonstration einer komplexen Addition per Operatorfunktion\n" << endl;
Ug = add(U1, U2);
cout << "Zuerst herkoemmlich mit Funktion add:\n"
<< "Ug = add(" << U1.Re << " + j*" << U1.Im << ", " << U2.Re << " + j*" << U2.Im
<< ") = " << Ug.Re << " + j*" << Ug.Im << endl;
Ug = U1 + U2; // <=> Ug = operator+(U1,U2);
cout<<"\nNun per ueberladenem Operator +:\n"
<<"Ug = ("<<U1.Re<<" + j*"<<U1.Im<<") + ("<<U2.Re<<" + j*"<<U2.Im<<") = "
<<Ug.Re<<" + j*"<<Ug.Im<<endl;
TComplex U3={2,3}, U4={4,5};
cout << "\n(" << U3.Re << " + j*" << U3.Im << ") + (" << U4.Re << " + j*" << U4.Im
<< ") = " << (U3+U4).Re << " + j*" << (U3+U4).Im << endl;
return 0;
}
|