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 :

Cas d'utilisation de this


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut Cas d'utilisation de this
    Bonjour,

    Je me pose une question sur l'utilisation du pointeur this.
    Je vois bien l'utilite pour le passage d'argument etc, par contre quand je vois un morceau de code comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MaClasse::MaFonction()
    {
    	this->Func1();
    	this->Func2();
    }
    Pourquoi utiliser une notation comme ça au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MaClasse::MaFonction()
    {
    	Func1();
    	Func2();
    }
    Meme si Func1 et Func2 sont virtuelles et definies dans un parent on va utiliser toujours la methode de plus bas niveau et si l'on veut utiliser une methode de plus haut niveau on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MaClasse::MaFonction()
    {
    	MaMere::Func1();
    	MaMere::Func2();
    }
    Donc pourquoi l'utiliser dans ce cas listé en haut ?

    Merci

  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
    Salut

    C'est principalement une raison de lisibilité lors de l'apprentissage, pour qu'un débutant comprenne bien que c'est une fonction membre. Mais c'est une pratique que l'on change rapidement, dès que l'on sait que c'est pas nécessaire
    Bref, pas d'utilité autre que pédagogique

    (à distinguer du cas avec les templates où le this est obligatoire)

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Par défaut
    Personnellement, je suis de ceux qui utilisent toujours this parce qu'on voit tout de suite ce qui appartient a la classe. C'est très utile quand on doit lire le code de quelqu'un d'autre et qu'il y a des tonnes de variables, sans qu'on soit trop sur d'ou elles viennent. Aussi, si on voit une méthode sans aucun this, on peut se demander s'il vaudrait pas mieux la passer en méthode statique.

  4. #4
    Membre très actif
    Avatar de EtherOS
    Homme Profil pro
    Etudiant Polytechnicien
    Inscrit en
    Juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant Polytechnicien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Par défaut
    l'utilisation des this permet la clarté et la compréhension du code.je suis de mem avis que math_lab

  5. #5
    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
    Je crois que le this est obligatoire en JAVA, PHP (C# ?). Les développeurs qui en viennent en mettent donc partout par habitude.

    Mais l'écrire est inutile, et en tant que programmeur et donc feignant, je ne me fatigue pas à écrire des choses inutiles.
    Pour savoir d'où viennent les choses, on a des conventions d'écritures.
    m_ préfixe les variables membres, s_ les static. Les noms de méthode membres débutent par une minuscule, les méthodes libres et static par une majuscule, on découpe en namespace claires, ...
    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.

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

    Informations professionnelles :
    Activité : aucun

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

    Dans 90% des cas, this ne sert strictement à rien et sera omis dans du code de production.

    On arrive en effet assez facilement à comprendre que si l'on appelle une fonction sans passer par un objet, on appelle soit une fonction membre de l'objet en cours soit une fonction libre, et cela suffit amplement, si les noms sont correctement choisis, pour lever toute ambigüité

    Dans quelques cas particuliers, this est cependant nécessaire lorsque l'on travaille avec des classes template, pour, justement, lever certaines ambigüités.

    Je serais donc de l'avis de bousk: A but didactique, dans un premier temps, il peut etre utile d'utiliser this, mais, étant fainéant de nature, c'est généralement le genre de chose qu'on abandonne très rapidement
    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

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Par défaut
    Ok merci donc c'est purement selon les conventions de chacun.
    Je suis plutôt de l'avis de Bousk et Koala01, dans le sens ou chaque appel d'une méthode est par défaut d'une méthode membre, donc spécifier a l'inverse le cas contraire.

    Merci a vous

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Il y a quand même ce genre de cas où this est incontournable (sauf à renommer le paramètre bien sûr, ou respecter des conventions d'écriture dixit Bousk) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void MyClass::setValue(int value) {
    this->value = value;
    }

  9. #9
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Oui je pense que ca a ete inclus essentiellement a cause de ces cas ambigus pour le compilateur.

    Des le moment ou on commence a faire de la bibliotheque template, on se retrouve facilement avec ces ambiguites ou il est juste impossible d'exprimer autrement ce qu'on veut faire.

    Il me semble qu'il y avait aussi un autre cas ou selon si on appelle avec ou sans this ca ne vas pas appeler la meme fonction, je crois que c'etait lie au CRTP ou quelque chose dans le genre.

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Oui enfin il existe aussi pas mal de cas où this s'utilise tel quel.
    Je pense à quelques design patterns, dont le médiateur et le visiteur.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Il y a quand même ce genre de cas où this est incontournable (sauf à renommer le paramètre bien sûr, ou respecter des conventions d'écriture dixit Bousk) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void MyClass::setValue(int value) {
    this->value = value;
    }
    Déjà un mutateur n'est que "moyen moyen", mais, en plus, à choisir je nommerais différemment le membre ou l'argument, au choix, et peut etre les deux

    Les conventions sur les noms de membres permettent de faire la distinction, qu'il s'agisse de m_value ou de value_, et, pour l'argument, dans le cas présent, je l'appellerais sans doutes newValue, selon le principe que ce qui apporte le plus de précision à un code n'est jamais que le bon choix des noms utilisés

    De manière générale, tu peux te dire que si le compilateur n'insiste pas pour que tu mette this, c'est que tu peux en éviter l'usage à condition de nommer correctement les différents intervenants

    Il y a un cas dans lequel il est effectivement indispensable pour éviter des ambigüités dans les classes template, mais, hors ce cas particulier, autant éviter son utilisation
    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

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Sie,

    En plus des cas déjà cités, entre autres :

    - si on doit passer l'objet à une fonction d'une autre classe, ...

    - pour la complétion de code dans les IDE qui la gèrent correctement.


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

Discussions similaires

  1. [Modélisation] Maille des cas d'utilisation
    Par ftrifiro dans le forum Cas d'utilisation
    Réponses: 14
    Dernier message: 28/08/2005, 18h39
  2. Cas d'utilisation, quel niveau de détails
    Par Celelibi dans le forum Cas d'utilisation
    Réponses: 5
    Dernier message: 20/02/2005, 20h16
  3. [Modélisation] Cas d'utilisation et acteurs
    Par ftrifiro dans le forum Cas d'utilisation
    Réponses: 5
    Dernier message: 30/01/2005, 15h20
  4. cas d'utilisation
    Par Yveke dans le forum Cas d'utilisation
    Réponses: 7
    Dernier message: 23/12/2004, 10h27
  5. [corba] débutant : dans quels cas l'utiliser
    Par jmturc dans le forum CORBA
    Réponses: 2
    Dernier message: 10/10/2002, 08h58

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