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 :

Question sur le pointeur this


Sujet :

C++

Vue hybride

Core8 Question sur le pointeur this 29/03/2007, 11h35
Laurent Gomila Dans ce cas-là ça ne fait... 29/03/2007, 11h38
Core8 Merci Laurent Gomila de ta... 29/03/2007, 12h01
koala01 Salut, Le pointeur this... 29/03/2007, 12h12
JolyLoic Il y a des cas où l'écriture... 29/03/2007, 14h31
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut Question sur le pointeur this
    Bonjour à tous,

    J'ai toujours été habitué à mettre les this même quand ce n'est pas nécessaire. Dans le code suivant je voudrais savoir si le fait de laisser le this à un quelqueconque désavantage ou non.

    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
    class mere {
    	...
    	void affiche(...){
    		...
    	}
    };
     
    class fille : public mere {
    	...
    	void methode(...){
    		this->affiche(...);
    	}
    	...
    };
     
    int main(){
    	Fille f(...);
    	f.methode(...);
    	return 0;
    }
    C'est un exemple qui n'est pas forcément logique, c'est juste pour montrer si dans un cas similaire le this est utile.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Dans ce cas-là ça ne fait strictement aucune différence.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Merci Laurent Gomila de ta réponse donc je vais les laisser.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Le pointeur this n'est, en définitive, qu'un pointeur... sur l'instance de l'objet en cours d'utilisation...

    Une sorte de "rappel" de l'objet qui travaille, si tu préfères

    Hormis le fait de permettre aux éditeurs un tant soit peu corrects de retrouver les différents membre de la classe en cours, quand il s'agit d'utiliser un membre ou une fonction membre de la classe elle-meme, l'utilisation de this-> ne présente, comme l'a dit Laurent, que peu d'intérêt...

    Par contre, il existe quantité de fonctions qui nécessitent d'avoir un pointeur (ou une référence) sur une instance d'objet bien précise comme argument...

    C'est dans ces cas là que le pointeur this trouve toute son utilité, sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UneFonctionHorsClasse(this);
    // OU---OU---OU sous forme de référence
    UneFonctionHorsClasse(*this);
    Un exemple raisonnable est la création d'une arborescence dont chaque noeud voudrait avoir un rappel du noeud parent:
    Code C++ : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    class Noeud
    {
        public:
            Noeud(Noeud* parent=NULL);//ne vaut NULL que dans un cas: c'est la
                                     //racine ;)
            ~Noeud();
            Noeud* CreateChild();
            Noeud* Parent();
            //autres méthodes qui vont bien
        private: 
            Noeud *m_parent;
            std::vector<Noeud*> m_children;
            //autres membres et méthodes qui vont bien
    };
    /* constructeur :
       @in: pointeur sur le noeud parent */
    Noeud::Noeud(Noeud* parent):m_parent(parent)
    {
    }
    /* destructeur */
    Noeud::~Noeud()
    {
        for(unsigned int i=0;i<m_children.size();i++)
            delete m_children[i];
        m_children.clear();
        m_parent=NULL;
    }
    /* Création d'un noeud enfant...
        C'est ici que this entre en jeu
        @out: pointeur sur le noeud créé
     */
    Noeud* Noeud::CreateChild()
    {
        //crée un nouvel objet de type noeud en fournissant this comme parent
        Noeud *nouveau=new Noeud(this);
        //ajoute le nouveau noeud à la liste des enfants
        m_children.push_back(nouveau);
        return nouveau;
    }
    /* Permet de retrouver le parent
        @out NULL si on est en racine d'arbre
             pointeur sur le parent autrement 
    */
    Noeud* Noeud::Parent()
    {
        return m_parent;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par koala01
    Hormis le fait de permettre aux éditeurs un tant soit peu corrects de retrouver les différents membre de la classe en cours, quand il s'agit d'utiliser un membre ou une fonction membre de la classe elle-meme, l'utilisation de this-> ne présente, comme l'a dit Laurent, que peu d'intérêt...
    Il y a des cas où l'écriture this-> est obligatoire (d'où je pense la précision "Dans ce cas-là" de Laurent). C'est en particulier une façon de rendre dans un template un nom dépendant de l'argument template.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

Discussions similaires

  1. question sur les pointeurs
    Par jd.baculard dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2006, 02h30
  2. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 09h55
  3. [Debutant] Question sur un pointeur
    Par etiennegaloup dans le forum Débuter
    Réponses: 15
    Dernier message: 06/01/2006, 23h34
  4. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    Réponses: 5
    Dernier message: 28/10/2005, 23h47
  5. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 08/01/2005, 23h25

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