IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Utilisation du pointeur "this"


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut Utilisation du pointeur "this"
    Bonjour à tous,

    Je reprends actuellement un bout de code développé par quelqu'un et celui-ci utilise intensément le pointeur "this" dans les classes.
    Par exemple dans une classe contenant un attribut "int m_int;" et une méthode de lecture de cet attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int getInt()
    {
        return(this->m_int);
    }
    Y a-t-il une différence sémantique à faire cela comparé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int getInt()
    {
        return(m_int);
    }
    Merci beaucoup de vos réponses.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut

    Si tu es payé au caractère tapé, la première version est mieux. Sinon, le respect d'une convention de codage (ici m_) est suffisant pour savoir que c'est une variable membre

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    Merci, je vais donc faire en sorte de me faire payer une prime suivant le nombre de caractères

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 117
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Il est vrai que le this dans le premier exemple est superflu, sachant que la convention semble être "m_" pour les variables membres.
    Toutefois, comme le this superflu n'apporte pas de coup, ni rien, qu'on le mette ou pas, change pas grand chose.
    Peut être même qu'il a été mis, juste pour activer l'autocomplétion et trouver le nom de la variable
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Si tu es dans une classe template héritant d'une classe dépendant des paramètres templates, alors le this est une solution pour accéder aux membres hérités (sans, ca ne compile pas, il y a cependant d'autre solutions).

    Sinon en effet c'est assez superflu.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    Merci de vos réponses et éclaircissements sur l'utilisation du "this".
    Dans mon cas, il devait s'agir soit d'une habitude d'utilisation de la personne, soit pour l'autocomplétion.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Il me semble que ça a aussi une utilité (plutôt limite) pour les paramètres et variables membres. Syntaxe qui nous avait été présentés en cours de JAVA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class C
    {
     int entier;
     public:
      void setInt(int entier) { this->entier = entier; }
    };
    Mais ça reste une mauvaise idée à utiliser amha..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Le this est très utile quand tu as une classe A dont une méthode peut construire une instance de la classe B qui nécessite un pointeur sur l'instance de la classe A qui l'a construit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    class B;
     
    class A
    {
                B * createB();
    };
     
    class B
    {
          B(A * prt);
         A * ptr;
    }
     
     
    B::B(A *ptr) : ptr(ptr)
    {}
     
    B * A::createB()
    {
               return new B(this);
    }
    this est aussi utilise pour comparer deux instances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class A
    {
           bool operator==(const A & a)
           {
                        return &a == this;
            }
    };

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo