Linksseitiger Operator



  • Hallo zusammen,

    wie kann ichs schaffen, dass ein überladener * Operator sowohl rechts- als auch linksseitig funktioniert, rechtsseitig war kein Problem

    Vektor operator*(const double skalar);

    aber linksseitig ???

    Gruss CatDog



  • Wenn der linke Operand kein Klassen-Objekt ist, mußt du den Operator als globale Funktion schreiben:

    class Vector
    {
      ...
    public:
      Vector operator*(double s) const;//v*s
      ...
    };
    
    Vector operator*(double s, const Vector& v)//s*v
    { return v*s; }
    


  • Gibts nicht eh sone Richtlinie, dass Dinge wie operator* global sien sollten, um implizierte Konvertierungen zu ermoeglichen? Wenn mich mein truebes Gedaechtnis nicht taeuscht, sieht ein Beispiel in etwa wie folgt aus:

    class Complex {
    public:
      Complex(double d); //Konvertierung double->complex moeglich
      Complex operator*(const Complex& rhs);
    }
    
    int main()
    {
      Complex a, b, c;
      a = b * 5.0;  //geht, da 5 in Complex konvertiert werden kann
      a = 5.0 * c; //geht nicht!
    }
    
    ////////////////////////////////
    //statt dessen:
    
    Complex operator*(const Complex& lhs, const Complex& rhs);
    //jetzt geht konvertierung auf beiden seiten...
    

Anmelden zum Antworten