Was ist der "dies" -Zeiger?

7

Ich bin ziemlich neu in C ++ und ich verstehe nicht, was der this Zeiger im folgenden Szenario tut:

%Vor%

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 ?

    
user2371809 11.05.2013, 00:57
quelle

9 Antworten

24

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 .

    
TelKitty 11.05.2013, 01:00
quelle
6

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.

    
Nik Bougalis 11.05.2013 01:11
quelle
3

Nur einige zufällige Fakten über this , um die anderen Antworten zu ergänzen:

%Vor%

Wenn das Objekt const ist, wird der Typ von this zu einem Zeiger auf const .

%Vor%

Der this -Zeiger kann verwendet werden, um auf einen Member zuzugreifen, der von einem Funktionsparameter oder einer lokalen Variablen überschattet wurde.

%Vor%

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.

    
jxh 11.05.2013 01:33
quelle
2

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).

    
AngelCastillo 11.05.2013 00:59
quelle
2

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 .

    
Aqeel Raza 11.05.2013 01:16
quelle
1

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.

    
Potatoswatter 11.05.2013 01:30
quelle
1
  

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. Ссылка

    
Rajat Garg 02.08.2016 09:09
quelle
0

Es ist ein lokaler Zeiger. Er verweist auf das aktuelle Objekt als lokales Objekt

    
Abhishek Mehta 06.12.2015 05:25
quelle
0

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.

    
Shahadat Hossain 21.11.2017 16:52
quelle

Tags und Links