112 votes

Quand dois-je utiliser explicitement le pointeur 'this'?

Quand dois-je écrire explicitement `` dans une méthode de une classe?

130voto

ASk Points 2525

Généralement, vous n'avez pas à, this-> est implicite.

Parfois, il y a un nom d'ambiguïté, où il peut être utilisé pour distinguer les membres de la classe et les variables locales. Cependant, ici, c'est une autre affaire où l' this-> est explicitement requis.

Considérons le code suivant:

template<class T>
struct A {
   int i;
};

template<class T>
struct B : A<T> {

    int foo() {
        return this->i;
    }

};

int main() {
    B<int> b;
    b.foo();
}

Si vous omettez this->, le compilateur ne sait pas comment traiter l' i, car il peut ou peut ne pas exister dans tous les instanciations de A. Afin de lui indiquer qu' i est en effet un membre de l' A<T>, pour n'importe quel T, l' this-> préfixe est nécessaire.

Remarque: il est possible de toujours omettre this-> préfixe à l'aide de:

template<class T>
struct B : A<T> {

    using A<T>::i; // explicitly refer to a variable in the base class

    int foo() {
        return i; // i is now known to exist
    }

};

34voto

PaV Points 391

Si vous déclarez une variable locale dans une méthode avec le même nom qu'un membre existant, vous devrez l'utiliser pour accéder au membre de la classe au lieu de la variable locale.

Impressions:

5
4

21voto

avakar Points 20031

Il y a plusieurs raisons pour lesquelles vous pourriez avoir besoin d'utiliser this pointeur explicitement.

  • Lorsque vous souhaitez passer d'une référence à votre objet à une fonction.
  • Quand il y a un déclarés localement objet avec le même nom que l'objet membre.
  • Lorsque vous essayez d'accéder aux membres de l' dépendante des classes de base.
  • Certaines personnes préfèrent la notation visuelle de lever l'ambiguïté membre accède dans leur code.

6voto

zebrabox Points 3937
<ol> <li>Lorsqu'une variable de membre serait cachée par une variable locale</li> <li>Si vous voulez juste pour qu'il soit clair que vous appellent une méthode d'instance/variable</li> <p><br>Certaines normes de codage utilisent l'approche (2) car elles prétendent qu'elle rend le code plus facile à lire.<br></p><p>Exemple:<br>Supposons que MyClass a une variable de membre appelée «compte»</p><pre><code></code></pre></ol>

5voto

rlbond Points 24215

Un autre cas est lors de l'invocation des opérateurs. Par exemple, au lieu de

vous pouvez dire

Ce qui est peut-être plus lisible. Un autre exemple est la copie-et-échange:

Je ne sais pas pourquoi il n'est pas écrit, `` mais cela semble être commun.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X