Ich bin ziemlich neu in C ++ und ich verstehe nicht, was der this
Zeiger im folgenden Szenario tut:
Ich habe das hier aus dem Post von jemand anderem genommen.
Worauf zeigt this
? Ich bin verwirrt. Die Funktion hat keine Eingabe. Was macht also this
?
this
bezieht sich auf das aktuelle Objekt.
Das Schlüsselwort this
identifiziert einen speziellen Typ von Zeiger. Angenommen, Sie erstellen ein Objekt namens x
von class A
und class A
hat eine nicht statische Elementfunktion f()
. Wenn Sie die Funktion x.f()
aufrufen, speichert das Schlüsselwort this
im Rumpf von f()
die Adresse von x
.
Die kurze Antwort ist, dass this
ein spezielles Schlüsselwort ist, das "dieses" Objekt identifiziert - dasjenige, auf dem Sie gerade arbeiten. Die etwas längere, komplexere Antwort lautet:
Wenn Sie ein class
haben, kann es Mitgliedsfunktionen zweier Typen haben: static
und nicht static
. Die Memberfunktionen nicht static
müssen auf einer bestimmten Instanz der Klasse ausgeführt werden und 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 auf die bestimmte Instanz des Objekts verweist Klasse, auf der die Elementfunktion ausgeführt wird.
Betrachten Sie dieses einfache Beispiel:
%Vor% Beachten Sie beim Kompilieren und Ausführen, dass der Wert von this
sich zwischen a1
und a2
unterscheidet.
Nur einige zufällige Fakten über this
, um die anderen Antworten zu ergänzen:
Wenn das Objekt const
ist, wird der Typ von this
zu einem Zeiger auf const
.
Der this
-Zeiger kann verwendet werden, um auf einen Member zuzugreifen, der von einem Funktionsparameter oder einer lokalen Variablen überschattet wurde.
Mehrfache Vererbung führt dazu, dass die verschiedenen Eltern verschiedene this
-Werte haben. Nur das erste geerbte übergeordnete Objekt hat den gleichen this
-Wert wie das abgeleitete Objekt.
Dies ist ein Zeiger auf self (das Objekt, das dies aufgerufen hat).
Angenommen, Sie haben ein Objekt der Klasse Auto namens auto, das eine nicht statische Methode getColor () hat, der Aufruf dieses Objekts getColor () gibt die Adresse von Auto zurück (die Instanz der Klasse).
Statische Elementfunktionen haben keinen this -Zeiger (da sie nicht mit einer Instanz verknüpft sind).
bedeutet das Objekt von Foo, auf dem DoSomething () aufgerufen wird. Ich erkläre es mit Beispiel
%Vor%und unsere Klasse
%Vor%Jetzt instanziieren wir Objekte wie
%Vor%Ähnlich wird die Zeichenfolge, die an den Foo-Konstruktor übergeben wird, beim Aufruf von DoSomething () ausgegeben. Weil zB in DoSomething () des obigen Beispiels "this" fooObject bedeutet und in do_something_to_a_foo () fooObject als Referenz übergeben wird .
Nichtstatische Elementfunktionen wie Foo::DoSomething
haben einen impliziten Parameter, dessen Wert für this
verwendet wird. Der Standard spezifiziert dies in C ++ 11 §5.2.2 / 4:
Wenn eine Funktion aufgerufen wird, wird jeder Parameter (8.3.5) mit seinem entsprechenden Argument initialisiert (8.5, 12.8, 12.1). [Hinweis: Solche Initialisierungen sind zueinander unbestimmt sequenziert (1.9) - Endnote] Wenn die Funktion eine nicht statische Elementfunktion ist, wird der
this
-Parameter der Funktion (9.3.2) mit einem Zeiger initialisiert zum Objekt des Aufrufs, konvertiert wie durch eine explizite Typumwandlung (5.4).
Als Ergebnis benötigen Sie ein Objekt Foo
, um DoSomething
aufzurufen. Dieses Objekt wird einfach this
.
Der einzige Unterschied (und es ist trivial) zwischen dem this
Schlüsselwort und einem normalen, explizit deklarierten const
Zeiger-Parameter ist, dass Sie die Adresse von this
nicht annehmen können.
Objektorientierte Programmierung mit c ++ von Balaguruswamy
this
ist ein Zeiger, der auf das Objekt zeigt, für das this
function aufgerufen wurde. Zum Beispiel wird der Funktionsaufruf A.max()
den Zeiger this
auf die Adresse des Objekts setzen. Der Zeiger this
fungiert als implizites Argument für alle Elementfunktionen.
Hier finden Sie ein großartiges Beispiel für this
Zeiger. Es hat mir auch geholfen, das Konzept zu verstehen.
Ссылка
Es ist ein lokaler Zeiger. Er verweist auf das aktuelle Objekt als lokales Objekt
Ein Zeiger ist ein Programmiersprachenobjekt, dessen Wert sich auf einen anderen Wert bezieht, der an anderer Stelle im Computerspeicher unter Verwendung seiner Speicheradresse gespeichert ist.
Man kann auch sagen, dass ein Zeiger eine Variable ist, die eine Speicheradresse als Wert enthält.