operatoroverloading Rückgabewert



  • Hallo,

    ich bin C++ Anfänger (von C übergestigen 😉 ) und habe folgende Frage:
    In einem Tutorial habe ich folgende typen in einer Klassendefinition gesehen:

    class Classenname
    {
        ...
        Classenname& operator = (Classenname &param)
        Classenname& operator ++ (void)
        ...
    };
    

    Was mich nun verwundert ist, dass der Rückgabewert der beiden Memberfunktionen eine Referenz ist. Aus C bin ich gewohnt, dass zB folgende operation:

    int x, y;
    ...
    x = 5;
    y = x;
    ...
    

    ... mir für x und y jeweils den Wert 5 liefert, obwohl y eine Kopie von x darstellt. Daher wenn ich nun den Wert von y verändern würde, so würde ich nach wie vor für x 5 haben.
    Wenn ich unter der oben genanten Funktionstypisierung der Klasse "Classenname" eine analoge operation durchführe (also eine zuweisung des einen objekts an das andere) was passiert dann? Wiso eine Referenz?

    Für Eure Antwort wäre ich Euch sehr dankbar.

    mfg 🙂



  • Korrekt lautet der Zuweisungsoperator

    Classenname& operator = (const Classenname &param)
    

    Was üblicherweise (auch implizit) so implementiert wird dass operator= Kopien der in param enthaltenen Daten erzeugt.



  • Danke für Deine Antwort 🙂

    LordJaxom schrieb:

    [...]
    Was üblicherweise (auch implizit) so implementiert wird dass operator= Kopien der in param enthaltenen Daten erzeugt.

    Hmm... aber wenn das Ganze eine Kopie zurückgibt, wiso ist dann der Rückgabewert des ganzen eine Referenz?
    Es heist doch:

    Classenname& operator = (const Classenname &param)

    😕

    meiner (Anfänger-)ansicht nach müsste das so sein:

    Classenname operator = (const Classenname &param)

    mfg



  • Das ganze gibt ja keine Kopie zurück, sondern das Objekt, dem zugewiesen wurde 😉

    int x;
    int &y = (x = 12);
    

    Hier ist x = 12 im Prinzip ein Aufruf von x.operator=(12). Der Operator erhält eine Konstante (zugegeben, 12 als Zahlenwert ist hier schon sehr konstant), erstellt von dieser eine Kopie und legt sie in sich selbst ab (für int vielleicht blöd beschrieben). Der Rückgabewert der Zuweisung ist eine Referenz auf x. Nach diesem Code ist y also eine Referenz auf x, y und x enthalten (dieselbe) 12.



  • ahsoooo.... jetzt hab ichs verstanden!

    Vielen Dank für die Umfangreiche Hilfe 🙂

    mfg


Anmelden zum Antworten