Qu'est-ce que le " il " pointeur?
Je suis assez novice en C++, et je ne comprends pas ce que la this
pointeur dans le scénario suivant:
void do_something_to_a_foo(Foo *foo_instance);
void Foo::DoSomething()
{
do_something_to_a_foo(this);
}
J'ai saisi que de quelqu'un d'autre poste sur ici.
Ce n' this
point? Je suis confus. La fonction n'a pas d'entrée, de sorte que ce qui est this
faire?
Tous les non-statique méthodes ont l'implicite
Je voudrais éviter de faire quelque chose comme cela - toute fonction qui "fait quelque chose pour les foo" devrait probablement être un membre de la fonction/méthode de Toto!
Uroda: Pas nécessairement à tous.
est un peu trop fort.
Que diriez-vous "est probablement un bon candidat pour être une méthode de Foo"? Le soin de fournir un contre-exemple pour moi? 🙂
this
pointeur. Typique du C++ implémentations, il est passé en premier argument entier logement.Je voudrais éviter de faire quelque chose comme cela - toute fonction qui "fait quelque chose pour les foo" devrait probablement être un membre de la fonction/méthode de Toto!
Uroda: Pas nécessairement à tous.
est un peu trop fort.
Que diriez-vous "est probablement un bon candidat pour être une méthode de Foo"? Le soin de fournir un contre-exemple pour moi? 🙂
OriginalL'auteur user2371809 | 2013-05-11
Vous devez vous connecter pour publier un commentaire.
this
fait référence à l'objet courant.Le mot-clé
this
identifie un type spécial de pointeur. Supposons que vous créez un objet nomméx
declass A
, etclass A
a un non-fonction membre statiquef()
. Si vous appelez la fonctionx.f()
, le mot-cléthis
dans le corps def()
stocke l'adresse dex
.OriginalL'auteur TelKitty
La réponse courte est que
this
est un mot-clé qui identifie ", cet" objet - celui sur lequel vous êtes actuellement en exploitation. Légèrement plus longues, plus complexes réponse est celle-ci:Lorsque vous avez un
class
, il peut avoir des fonctions de membre de deux types:static
et nonstatic
. Le non-static
fonctions de membre doit fonctionner sur un particulier instance de la classe, et ils ont besoin de savoir où cette instance. Pour les aider, la langue définit une variable implicite (c'est à dire celle qui est déclarée automatiquement pour vous lorsque c'est nécessaire, sans que vous ayez à faire quoi que ce soit) qui est appeléthis
et qui sera fait automatiquement au point à l'instance particulière de la classe sur lequel la fonction de membre est de l'exploitation.Considérer cet exemple simple:
Lorsque vous compilez et exécutez ce, d'observer que la valeur de
this
est différente entrea1
eta2
.OriginalL'auteur Nik Bougalis
N'importe faits sur
this
pour compléter les autres réponses:Lorsque l'objet est
const
, le type dethis
devient un pointeur versconst
.La
this
pointeur peut être utilisé pour accéder à un membre qui a été éclipsé par une fonction paramètre ou d'une variable locale.L'héritage Multiple sera la cause de la différente que les parents disposent de différents
this
valeurs. Seule la première hérité du parent aura la mêmethis
valeur de l'objet dérivé.OriginalL'auteur jxh
ce est un pointeur vers soi (l'objet qui a invoqué ce).
Supposons que vous avez un objet de la classe Voiture nommée voiture qui ont un non méthode statique getColor(), l'appel à l'intérieur de la getColor() renvoie l'adresse de voiture (l'instance de la classe).
Fonctions membres statiques ne dispose pas d'un ce pointeur(puisqu'ils ne sont pas liés à une instance).
OriginalL'auteur AngelCastillo
cela signifie que l'objet de Foo sur lequel DoSomething() est invoquée. - Je l'expliquer avec un exemple
et notre classe
maintenant, nous instancier des objets comme
de la même façon quelle que soit la chaîne de caractères sera transmis à Toto constructeur sera imprimé sur l'appel de DoSomething().
Parce que par exemple dans DoSomething() de l'exemple ci-dessus "ce" signifie fooObject et dans do_something_to_a_foo() fooObject est passé par référence.
OriginalL'auteur Aqeel Raza
Fonctions membres non statiques tels que
Foo::DoSomething
ont un paramètre implicite dont la valeur est utilisée pourthis
. La norme spécifie, dans C++11 §5.2.2/4:Comme un résultat, vous avez besoin d'un
Foo
objet à appelerDoSomething
. Cet objet devient tout simplementthis
.La seule différence (et c'est trivial) entre le
this
mot-clé et une normale, explicitement déclaréesconst
pointeur de paramètre, c'est que vous ne pouvez pas prendre l'adresse dethis
.OriginalL'auteur Potatoswatter
this
est un pointeur qui pointe sur l'objet pour lequelthis
fonction a été appelée. Par exemple, l'appel de la fonctionA.max()
va définir le pointeurthis
à l'adresse de l'objet. Le pointeurthis
est agit comme un argument implicite à toutes les fonctions de membre.Vous trouverez un grand exemple de
this
pointeur ici. Il m'a aussi aidé à comprendre le concept.http://www.learncpp.com/cpp-tutorial/8-8-the-hidden-this-pointer/
OriginalL'auteur Rajat Garg
C'est un pointeur.Il fait référence à l'objet courant comme objet local
OriginalL'auteur Abhishek Kumar