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.