Pointer-Verständnis-Frage
-
Hallo,... ich frische grad mein C++ ein bisschen auf und folgende Frage ist aufgetreten:
class Calc { private: int m_nValue; public: Calc() { m_nValue = 0; } Calc& Add(int nValue) { m_nValue += nValue; return *this; } Calc& Sub(int nValue) { m_nValue -= nValue; return *this; } Calc& Mult(int nValue) { m_nValue *= nValue; return *this; } int GetValue() { return m_nValue; } };Man nutzt in diesem Beispiel *this, damit man durch eine Verkettung von Funktionen mehrere Aufgaben gleichzeitig erledigen kann. Aber was bedeutet das Calc&? Der Returnwert muss das Objekt sein, damit man Add(2).Sub(3)... usw., aber wieso das & am Ende?
ps.: ich bin eine Java-geschädigte Person, die als Returnwert Calc, aber nicht Calc + komisches Sonderzeichen erwartet.
-
Aber was bedeutet das Calc&?
& bedeuted hier Referenz.
Simon
-
...kann man natürlich so machen. Es kann natürlich sein, dass jemand die Funktionen aufruft, ohne das Objekt ändern zu wollen. Aus dem Grund hatte ich früher in meiner Java-Klasse "Vector3d" auch zwei Versionen ("plusEquals" und "plus" für += und +).
In C++ geht das dann aber doch noch eleganter. Du kannst gleich die arithmetischen Operatoren überladen. Da weiß man dann sofort, woran man ist. Und: Die eigene Klasse lässt sich auch meist in generischen Algorithmen einsetzen. Zum Beispiel habe ich neulich meine point<double,3>-Klasse in eine generische Funktion gesteckt, die interpolieren soll. Weil ich für point<double,3> auch entsprechende Operatoren zur Verfügung gestellt hatte, klappte das einwandfrei ohne Extrawurst.
class dings { ... public: ... dings& operator+=(dings const& d); ... }; dings operator+(dings const& a, dings const& b) { dings ret = a; ret += b; return ret; }Da this ein Zeiger ist und das Ergebnis einer Zuweisung eine Referenz auf das zugewiesene Objekt sein sollte, findest Du in den ?= Operatoren (mit +, -, *, ... anstelle von ?) oft "return *this;" -- der this-Zeiger wird dereferenziert.
Gruß,
SP