Überladung des Zuweisungsoperators



  • Hallo zusammen!

    Folgende Frage:

    Wieso benötige ich bei der Überladung eines Zuweisungsoperators eine Referenz als Rückgabewert und bei normalen Überladungen wie z.B. der Addition nicht?

    Beispiel Deklaration:

    Klasse &operator=(const Klasse& z);
    Klasse operator+(const Klasse& z) const;
    

    Meine Erklärung:
    Des hängt doch damit zusammen, das die Zuweisungsoperator-Funktion wieder das links-stehende Objekt zurückliefert und dadurch der Kopierkonstruktor aufgerufen wird? Mit der Referenz wird dies verhindert??

    Danke für eure Hilfe!!



  • Bei einer Addition ist gewünscht, dass eine Kopie angelegt wird. Das Ergebnis davon, zwei Operanden zu addieren, soll ein neues Objekt liefern. Folglich wird der Rückgabewert als Kopie zurückgegeben. Es wäre gar nicht anders möglich, da Referenzen auf lokale Objekte ungültig sind und bestimmt nicht einer der Operanden zurückgegeben werden soll.

    Beim Zuweisungsoperator hingegen wird eine Referenz auf das zugewiesene Objekt zurückgegeben. Durch eine Zuweisung soll ja kein neues Objekt entstehen, sondern ein bestehendes neu beschrieben werden. Durch die Referenz werden Kettenzuweisungen möglich:

    a = b = c;
    


  • Nexus schrieb:

    Durch die Referenz werden Kettenzuweisungen möglich:

    a = b = c;
    

    Das würde auch ohne Referenz funktionieren; denn = ist rechtsbindend:

    a = b = c; // ist dasselbe wie a = (b = c);
    

    Mit der Referenz als Rückgabetyp von op= bekommt man das Verhalten, welches bei skalaren Typen auch schon gegeben ist: Die Zuweisung liefert nunmal einen Lvalue-Ausdruck, etwas, das sich auf das zugewiesene Objekt bezieht.



  • Ich danke euch ich glaub ich habs kapiert!


Anmelden zum Antworten