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.