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


Log in to reply