Die kurze Antwort ist, dass this
ist ein spezielles Schlüsselwort, das "dieses" Objekt identifiziert - das, auf dem Sie gerade arbeiten. Die etwas längere, komplexere Antwort lautet wie folgt:
Wenn Sie eine class
haben, kann es Elementfunktionen von zwei Typen haben: static
und nicht static
. Die Nichtmitgliedsfunktionen von static
müssen auf einer bestimmten Instanz der Klasse arbeiten, und sie müssen wissen, wo sich diese Instanz befindet. Um ihnen zu helfen, definiert die Sprache eine implizite Variable (dh eine, die automatisch für Sie deklariert wird, wenn sie benötigt wird, ohne dass Sie etwas tun müssen), die this
heißt und die automatisch so ausgeführt wird, dass sie auf die bestimmte Instanz der Klasse verweist welche die Mitgliedsfunktion betreibt.
Betrachten Sie dieses einfache Beispiel:
#include <iostream>
class A
{
public:
A()
{
std::cout << "A::A: constructed at " << this << std::endl;
}
void SayHello()
{
std::cout << "Hi! I am the instance of A at " << this << std::endl;
}
};
int main(int, char **)
{
A a1;
A a2;
a1.SayHello();
a2.SayHello();
return 0;
}
Wenn Sie diese kompilieren und ausführen, beachten Sie, dass der Wert von this
zwischen a1
und a2
unterscheidet.
Alle nicht statischen Methoden haben einen impliziten "this" -Zeiger. In typischen C++ - Implementierungen wird es im ersten Integer-Argument-Slot übergeben. –
Ich würde vermeiden, so etwas zu tun - jede Funktion, die "etwas zu einem foo tut" sollte wahrscheinlich eine Member-Funktion/Methode von Foo sein! –
@Wayne Uroda: Nicht unbedingt überhaupt. –