2 typen von Operator Overloading
-
Hallo,
ich hätte noch eine Frage zu operator overloading und zwar habe ich gelesen, dass es 2 Arten von operator overloading gibt,
weiß jemand welche 2 das sind und was die Unterschiede bei diesen beiden sind?lg und vielen Dank für die Antworten,
-
Du kannst einen Operator entweder als freie (globale) Funktion oder als Methode einer Klasse überladen.
Umsetzung als Methode:
class test { public: test& operator+=(const test& other); // der erste Operand wird als this-Objekt übergeben, der zweite als Parameter test& operator!(); // der (einzige) Operand wird als this-Objekt übergeben };
Vorteile Methode:
- Hat unmittelbar Zugriff auf die Klasseninterna (freie Funktionen brauchen 'friend' oder müssen über die öffentliche Schnittstelle gehen).
- kann virtuell sein
- einige Operatoren (afaik =, [], (), *, ->) müssen als Methode überladen werden
Umsetzung als globale Funktion:
class test { ... }; test operator+(const test& left,const test& right); // beide Operanden werden als Parameter übergeben test operator-(const test& op); // der (einzige) Operand wird als Parameter übergeben
Vorteile Funktion:
- Der Compiler kann auch für den linken/einizgen Operanden Typumwandlungen vornehmen (bei der Methode muß der Typ exakt stimmen)
- sind auch möglich, wenn du keinen Zugriff auf die Definition des linken/einzigen Parametertypen hast (z.B. std-Klassen (der Klassiker sind die IO-Operatoren) oder Build-in Typen*)
* wobei man für die Build-in Typen die unären Operatoren nicht überladen kann