Referenz beim Überladen des += Operators?
-
Schönen guten Abend

Ich habe eine kurze Frage an Euch
In eurem Forum habe ich ein Tutorial gefunden zum überladen von Operatoren.
Warum muss ich beim überladen des += Operators eine Referenz des Objektes zurückgeben ?CMann& CMann::operator +=(CMann& b)Bei mir hat auch alles ohne Probleme funktioniert. Und zwar wie folgt:
CMann CMann::operator +=(CMann& b) { m_name = m_name + b.m_name; m_alter = m_alter + b.m_alter; return *this; }Über den Debugger gejagt und in Dir der main kommt das richtige raus. Egal ob per Referenz oder per Value zurückgegeben wird.
Warum ?
Danke im Voraus

-
a+=bist ja nichts anderes als
a = a + bKann es vielleicht daran liegen das alles dem "a" zugewiesen wird und wir in der Methode kein neues Objekt erstellen brauchen und deshalb eine Referenz ausreicht?
z.B
a = 3 b = 4a = 3 + 4a = 7Und verweisen
aden Wert einfach als Referenz zurück?
-
buu2188 schrieb:
Egal ob per Referenz oder per Value zurückgegeben wird.
Wenn du keine Referenz zurückgibst, erzeugst du eine Kopie deines (eventuell großen) Objektes. Warum willst du kopieren?
Beispiele, wo was anderes rauskäme:
(a+=b)+=c;Oder vielleicht realistischer:
(a+=b).modifyObject();Wenn du eine Kopie zurückgibst, dann wird das +=c bzw. modifyObject auf der Kopie aufgerufen. Gibst du eine Referenz zurück, dann bezieht sich das auf das geänderte a. Aber generell willst du hier einfach keine Kopie haben. Du willst schließlich etwas ändern.
Anders sieht es bei operator+ aus. Da gibst du keine Referenz zurück.