Operator überladung beidseitig
-
Hallo!
Ich habe mir einen Vector2D geschrieben und den Operator
inline Vector2D operator*(double Skalar) { return Vector2D(x*Skalar, y*Skalar); }
Definiert.
Wenn ich nun
Vector2D TestVec; TestVec=TestVec*4;
ist alles gut bei
Vector2D TestVec; TestVec=4*TestVec;
geht's dann nicht, warum kann ich mir schon denken, aber wie löse ich das jetzt, dass es egal ist wo die 4 steht?
Danke!
-
Indem du den Operator nicht als Memberfunktion sondern als normale Funktion definierst:
inline Vector2D operator*(double f, const Vector2D& v) { return Vector2D(f * v.x, f * v.y); } inline Vector2D operator*(const Vector2D& v, double f) { return f * v; }
-
Du musst ihn frei definieren:
Vector2D operator*(Vector2D const& lhs, double rhs); Vector2D operator*(double lhs, Vector2D const& rhs);
-
Definiere den Operator nicht als Teil der Klasse:
Vector2D operator*(double Skalar, const Vector2D& v) { return Vector2D(v.x*Skalar, v.y*Skalar); }
-
Schön! Danke, an alle 3 :).
-
Zu dem Thema hab ich mir mal die Mühe gemacht ein paar "best practices" zusammenzutragen (hier im Magazin):
Überladung von Operatoren in C++ (Teil 1)Vielleicht könnte dich auch folgendes intersssieren:
Einführung in boost::operators