Operator Rückgabetyp



  • Hallo,
    ich habe nochmal eine Frge zu der Operntorüberladung.

    Und zwar wurde hier zuerst der += Operator überladen.

    Dann dieser:

    template<class T>
    MathVektor<T> operator*(const T& zahl. const MathVektor<T> v) {
       MathVektor<T> temp=v;
       return temp*=zahl;
    }
    

    dann dieser:

    template <class T>
    MathVektor<T> operator*(const MathVektor<T>& v, const T& Zahl) {
       return zahl*v;
    }
    

    Erstmal, da hier nicht geschrieben wurde:
    [/cpp]MathVektor<T> MathVektor<T>::operator*(...)[cpp]

    Muss diese Definition ja in der Klasse direkt erfolgt sein, oder?

    Dann wieso wird bei der 2. von mir geposteten Überladung der Wert nicht als Referenz zurückgegeben. Beim ersten ist das ja wegen dem temporärem Objekt klar. Aber wieso ist das hier so.

    Viele Grüße

    Edit: Titel korrigiert



  • 1. Nein, die Definition muss nicht im Klassenkörper stehen. Der Operator kann und sollte sogar als freie Funktion definiert werden (siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-232010.html).

    2. Hier gibst du auch eine temporäre Variable zurück, auch wenn sie sich etwas versteckt hat:

    template <class T>
    MathVektor<T> operator*(const MathVektor<T>& v, const T& Zahl) {
       return operator*(zahl, v);    // op* gibt ein MathVektor<T> per value zurück
    }
    

Log in to reply