Hallo, this Zeiger liefert innerhalb einer Elementfunktion die Adresse des Objekts zurück, auf das sich die Elementfunktion bezieht. gilt das auch für Konstruktoren? kann mir jemand anhand eines einfachen beispiel das Thema "this Zeiger" erklären, von Wikipedia werde ich nicht schlauer! Danke im Voraus!
> gilt das auch für Konstruktoren?
Klar, der Speicher für das Objekt muss vor dem Konstruktor-Call schon
angelegt sein, sonst würde ja jegliche Member-Initialisierung darin in
die Pampa gehen.
Der Aufruf einer Member-Funktion in C++ funktioniert genauso wie der Aufruf einer normalen Funktion dessen 1. Parameter ein Pointer ist: Die klassische C-Version
1 | struct Test { |
2 | int x; |
3 | };
|
4 | void Test_Funktion (Test* this_) { |
5 | this_->x = 7; |
6 | }
|
7 | int main () { |
8 | Test t; |
9 | Test_Funktion (&t); |
10 | }
|
entspricht in C++ mit Member-Funktionen
1 | class Test { |
2 | public:
|
3 | int x; |
4 | void Funktion () { this->x = 7; } |
5 | };
|
6 | int main () { |
7 | Test t; |
8 | t.Funktion (); |
9 | }
|
Lediglich das this-> kann man in C++ weglassen, das "x" würde trotzdem gefunden. Hier ein Beispiel wie die Adressen aussehen: http://ideone.com/JhAm9n Man sieht, dass die Adresse von "this" der von "t" in main() entspricht (auf dem die Funktion aufgerufen wurde). Die Adresse der 1. Member-Variablen ist die selbe, da diese am Anfang der Instanz steht. Die 2. Member-Variable folgt darauf und hat daher eine größere Adresse.
Dr. Sommer schrieb: > entspricht in C++ mit Member-Funktionen Typischerweise (abhängig vom ABI) entspricht das sogar exakt, d.h. es kommt der selbe Maschinen-Code heraus.
Georg A. schrieb: >> gilt das auch für Konstruktoren? > > Klar, der Speicher für das Objekt muss vor dem Konstruktor-Call schon > angelegt sein, sonst würde ja jegliche Member-Initialisierung darin in > die Pampa gehen. Es sei aber erwähnt, daß man aufpassen muß. Da das Objekt ja noch nicht vollständig initialisiert ist, kann's Probleme geben, wenn man den Zeiger nach "draußen" gbit und dort an der Stelle dann sofort Zugriffe über den Zeiger macht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.