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...