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