Definition von this richtig ?



  • Hallo,
    hab folgende Definition für einen This Zeiger:

    Jede Methode (ausser statisch) besitzt einen This Zeiger der auf das Objekt zeigt von dem die Methode aufgerufen wurde.

    Is die Definition richtig ? Dachte immer die Objekte besitzen den This Zeiger und nicht die Methoden ?

    MfG Schnuggels



  • this ist innerhalb von Methoden automatisch definiert als konstanter Zeiger auf
    das Objekt selbst, für das die Methode aufgerufen wurde



  • Also wär auch meine Definition richtig nehm ich an!



  • schnuggels schrieb:

    Also wär auch meine Definition richtig nehm ich an!

    Jo.

    Der Compiler zaubert aus
    o.f();
    ein
    f(&o);

    und der erste param von f bleibt versteckt (scheint in der funktion nicht auf) und wird this genannt und unsichtbar für dich an f übergeben.

    so läuft es in etwa ab 🙂



  • Wieso macht er aus dem o.f() soein "prozedurales" f(&o)? Hast du da ein wenig Literatur warum das so abläuft, Shade Of Mine? Klingt so, als könne der Compiler kein OO.



  • Nein, nein, ich denke das ist eher so gedacht.

    aus
    o.f(a, b)
    wird
    o.f(&o, a, b)

    und von &o merkst du nichts. Für dich ist das einfach this.



  • aus
    o.f(a, b)
    wird
    f(&o, a, b)
    


  • hehejo schrieb:

    Nein, nein, ich denke das ist eher so gedacht.

    aus
    o.f(a, b)
    wird
    o.f(&o, a, b)

    und von &o merkst du nichts. Für dich ist das einfach this.

    Naja, nur dass das o. vorne dann ja nix bringt 😉

    Warum soll
    f(&o, a,b)
    nicht objekt orientiert sein?

    abgesehen davon, dass der prozessor sowieso keine high level statements wie klassen oder gar funktionen kennt.



  • Shade Of Mine schrieb:

    schnuggels schrieb:

    Also wär auch meine Definition richtig nehm ich an!

    Jo.

    Der Compiler zaubert aus
    o.f();
    ein
    f(&o);

    und der erste param von f bleibt versteckt (scheint in der funktion nicht auf) und wird this genannt und unsichtbar für dich an f übergeben.

    so läuft es in etwa ab 🙂

    Wobei das natürlich nur eine von unzähligen Implementationsmöglichkeiten ist. Entspricht so aber dem klassischen CFront-Ansatz.

    Für die Definition von this ist die Implementation aber letztlich nicht relevant.
    Die Standarddefinition (9.3.2/p1):

    In the body of a nonstatic (9.3) member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called. The type of this in a member function of class X is X*. If the member function is declared const, the type of this is const X*[...]

    Wieso macht er aus dem o.f() soein "prozedurales" f(&o)? Hast du da ein wenig Literatur warum das so abläuft

    Siehe z.B. Stanley B. Lippman "Inside the C++ Object Model". Aber wie gesagt, dass ist nur eine mögliche Implementationstechnik.


Log in to reply