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+=b
    

    ist ja nichts anderes als

    a = a + b
    

    Kann 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 = 4
    
    a = 3 + 4
    
    a = 7
    

    Und verweisen

    a
    

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


Anmelden zum Antworten