Operatorüberladung
-
Hallo,
in meinem Buch steht ein Beispiel, wie man einen Vektor (als Klasse) mit einem anderen addieren kann. Dabei wurde folgender Code vorgestellt (man beachte, dass die Variablen x, y, z public sind!:inline tbVector3 operator + (const tbVector3 &a, const tbVector3 &b) { return a.x + b.x, a.y + b.y, a.z + b.z; }So wenn ich ihn nun übernehmen wollte, dass sagt mir die IDE, dass zu viele Parameter für die Operator-Funktion vorhanden sind. Er fordert also exakt einen Parameter. Ich verstehe nicht wieso, denn wenn ich das Beispiel (cpp-Datei) von der Buch-CD in meinen Compiler kopiere, dann übernimmt er das einfach. Meine Lösung war jetzt etwas abgeändert:
inline tbVector3 operator + (const tbVector3 &b) { tbVector3 a(this->x, this->y, this->z); // Übergebe die Daten der aktuellen Instanz return a.x + b.x, a.y + b.y, a.z + b.z; }
-
Schau nochmal genau: Die erste Variante ist eine globale Funktion, die zweite eine Memberfunktion

Btw: Das return Statement ist wohl in beiden Fällen nicht was du willst. Du willst wohl eher return tbVector3(x, y, z);
-
dot schrieb:
Schau nochmal genau: Die erste Variante ist eine globale Funktion, die zweite eine Memberfunktion

Ah, okay, ich werds nochmal nachlesen

Btw: Das return Statement ist wohl in beiden Fällen nicht was du willst. Du willst wohl eher return tbVector3(x, y, z);
Stimmt, tut mir Leid da ist was weggelaufen
Richtig wäre natürlich:inline tbVector3 operator + (const tbVector3 &a, const tbVector3 &b) { return tbVector3(a.x + b.x, a.y + b.y, a.z + b.z); }
-
Warum lässt sich der Vector überhaupt über einen einzelnen Wert konstruieren? Der Konstruktor sollte auf jeden Fall als explicit markiert sein.
-
314159265358979 schrieb:
Warum lässt sich der Vector überhaupt über einen einzelnen Wert konstruieren? Der Konstruktor sollte auf jeden Fall als explicit markiert sein.
Ich bezweifle dass sich der Code von oben so compilieren ließ, wenn er ihn aus dem Buch übernommen hat. Eben weil ein Konstrutktor, der nur ein Argument annimmt sinnfrei wäre, egal ob explicit oder nicht.