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 de this


Sujet :

C++

Vue hybride

ttone Utilisation de this 26/09/2008, 00h41
3DArchi Essaye ça et tu devrais avoir... 26/09/2008, 09h22
ttone Ca a donc un sens dans... 26/09/2008, 11h30
Nogane A priori je dirai que oui.... 26/09/2008, 12h41
Ulmo Et quelle est la différence... 26/09/2008, 14h20
3DArchi Jette aussi un coup d'œil à... 26/09/2008, 15h06
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut Utilisation de this
    Pourquoi est il plus propre d'utiliser MaClasse::methode() dans un prototype de MaClasse.class,
    plutôt que this->methode ?

    ps : ca marche aussi avec les arguments

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Essaye ça et tu devrais avoir une piste pour comprendre:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <iostream>
     
    class A
    {
    public:
       virtual void MaMethode()
       {
          std::cout<<"A::MaMethode"<<std::endl;
       }
       virtual void MaSecondeMethode()
       {
          std::cout<<"A::MaSecondeMethode"<<std::endl;
       }
     
       void MaisPourquoi()
       {
          std::cout<<"this->MaMethode()"<<std::endl;
          this->MaMethode();
          std::cout<<"A::MaSecondeMethode()"<<std::endl;
          A::MaSecondeMethode();
       }
     
    };
    class B :public A
    {
    public:
       virtual void MaMethode()
       {
          std::cout<<"B::MaMethode"<<std::endl;
       }
       virtual void MaSecondeMethode()
       {
          std::cout<<"B::MaSecondeMethode"<<std::endl;
       }
     
    };
     
    int main(int argc, char* argv[])
    {
       B b;
       b.MaisPourquoi();
       return 0;
    }

  3. #3
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    Ca a donc un sens dans l'héritage.
    Uniquement?

  4. #4
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    A priori je dirai que oui.
    Et je ne dirai pas que l'un est plus propre que l'autre.
    Ça dépend du comportement que tu veux. Si tu veux appeler la méthode du type réel de ta class (B), ou d'un de ces ancêtre spécifiquement.

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Et quelle est la différence entre ces 2 versions ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this->maMethode()
    maMethode() // tout court
    J'ai l'impression que c'est juste une perte de lisibilité.

    Sinon, MaClasse::maMethode() n'est pas spécialement propre, puisqu'on désactive explicitement le polymorphisme.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Jette aussi un coup d'œil à ça.

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 465
    Par défaut
    Citation Envoyé par Ulmo Voir le message
    Sinon, MaClasse::maMethode() n'est pas spécialement propre, puisqu'on désactive explicitement le polymorphisme.
    Non, mais il faut se souvenir que l'opérateur de portée est utile en cas d'ambigüité sur les noms de méthode.

    Le même programme qu'au-dessus mais avec une classe « Abis » identique à la classe « A » et de même génération :

    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
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include <iostream>
     
    class A
    {
    public:
       virtual void MaMethode()
       {
          std::cout<<"A::MaMethode"<<std::endl;
       }
       virtual void MaSecondeMethode()
       {
          std::cout<<"A::MaSecondeMethode"<<std::endl;
       }
     
       void MaisPourquoi()
       {
          std::cout<<"A this->MaMethode()"<<std::endl;
          this->MaMethode();
          std::cout<<"A::MaSecondeMethode()"<<std::endl;
          A::MaSecondeMethode();
       }
     
    };
     
    class Abis
    {
    public:
       virtual void MaMethode()
       {
          std::cout<<"Abis::MaMethode"<<std::endl;
       }
       virtual void MaSecondeMethode()
       {
          std::cout<<"Abis::MaSecondeMethode"<<std::endl;
       }
     
       void MaisPourquoi()
       {
          std::cout<<"Abis this->MaMethode()"<<std::endl;
          this->MaMethode();
          std::cout<<"Abis::MaSecondeMethode()"<<std::endl;
          Abis::MaSecondeMethode();
       }
     
    };
     
    class B :public A , public Abis
    {
    public:
       virtual void MaMethode()
       {
          std::cout<<"B::MaMethode"<<std::endl;
       }
       virtual void MaSecondeMethode()
       {
          std::cout<<"B::MaSecondeMethode"<<std::endl;
       }
     
    };
     
    int main(int argc, char* argv[])
    {
       B b;
    // b.MaisPourquoi();  // Ambigü
       b.A::MaisPourquoi();
       b.Abis::MaisPourquoi();
       return 0;
    }

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

Discussions similaires

  1. Utilisation de this
    Par supzero dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 22/02/2009, 22h14
  2. utilisation du this
    Par kenny.kev dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 08/04/2008, 14h36
  3. utilisation de this[]
    Par michpc dans le forum Flash
    Réponses: 2
    Dernier message: 01/02/2007, 12h59
  4. les classes et c# .. quand utiliser le "this" ?
    Par jgbid123 dans le forum Windows
    Réponses: 3
    Dernier message: 01/12/2006, 22h04
  5. [POO] Erreur lors de l'utilisation de $this en PHP5
    Par Ekimasu dans le forum Langage
    Réponses: 4
    Dernier message: 03/11/2006, 20h21

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