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

Langage C++ Discussion :

Performance mot clé virtual


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut Performance mot clé virtual
    Petite question juste par curiosité ^^
    Je sais qu'il est déconseillé de mettre des virtuals partout (nan sérieux ^^) parce que la génération de la vtable et l'appel des méthodes en est allongé. Dans le cas du polymorphisme il suffit de mettre le mot clé virtual a la méthode situé le plus haut dans la hiérarchie des classes pour que cela soit pris en compte par toutes les classes filles. Exemple :

    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
    struct A
    {
        virtual char test() {return 'A';}
    };
     
    struct B : public A
    {
        char test() {return 'B';}
    };
     
    struct C : public B
    {
        char test() {return 'C';}
    };
     
    int main(int argc, char* argv[])
    {
    	A* myObject1 = new A();
    	A* myObject2 = new B();
    	A* myObject3 = new C();
     
    	printf("%c\n",myObject1->test());
    	printf("%c\n",myObject2->test());
    	printf("%c\n",myObject3->test());
     
    	system("PAUSE");
     
    	return 0;
    }
    Ecrit dans la console :
    Bon vous allez me dire ouai où il veut en venir
    Enfaite j'aimerais juste savoir si ça diminue les performances (même d'un micro-chouilla ^^) de mettre un virtual pour les méthodes de chaque classe fille alors que cette méthode est déjà définie virtual dans la classe mère.
    Enfaite je vous pose cette question parce que j'ai l'habitude de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct A
    {
    	virtual char test() {return 'A';}
    };
     
    struct B : public A
    {
    	virtual char test() = 0;
    };
     
    struct C : public B
    {
    	char test() {return 'C';}
    };
    (Voir même de mettre virtual char test()... pour la méthode de la class C, fin structure ça revient au même)
    Alors que ce qui suit marche parfaitement mais look strange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct A
    {
    	virtual char test() {return 'A';}
    };
     
    struct B : public A
    {
    	char test() = 0;
    };
     
    struct C : public B
    {
    	char test() {return 'C';}
    };
    Je suppose que le mieux c'est encore de mettre virtual en commentaire avant de déclarer la méthode qui n'a pas vraiment besoin de ce mot-clé, mais au final, si je met carrément le mot-clé virtual est ce que ça ralentit le programme a l'exécution ? à la compilation ?
    Merci d'avance

  2. #2
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    si je met carrément le mot-clé virtual est ce que ça ralentit le programme a l'exécution ?
    Non. Je suppose que les exe générés seront identiques à l'octet près (fais un diff si tu veut en être certain)

    Citation Envoyé par oxyde356 Voir le message
    à la compilation ?
    Peut-être un milliardième de seconde plus lent (le temps de lire le mot-clé et de l'identifier). Et encore c'est pas sûr.

  3. #3
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Le mot clef virtual est ajouté implicitement... Que tu le mettes ou non dans les classes filles il y'est.

  4. #4
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Okay merci bien ^^
    Et vous vous faites comment, vous l'écrivez en dur ? en commentaire ? pas du tout ? (petit sondage )

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Je l'écris comme ça y'a pas d'ambiguïté. (si j'ai pas la visibilité sur la classe mère c'est utile de savoir lesquelles sont virtuelles...)

  6. #6
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Ouep je suis d'accord c'est ce que je fais aussi, je l'avais déjà vu en commentaire aussi m'enfin si ça change rien autant le mettre.
    Merci

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

Discussions similaires

  1. Utilisation du mot clé Virtual
    Par morgan2b dans le forum C#
    Réponses: 2
    Dernier message: 27/05/2011, 10h52
  2. Propagation du mot clef virtual
    Par Lavock dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2010, 12h26
  3. mot clé virtual
    Par juju92 dans le forum C#
    Réponses: 3
    Dernier message: 29/11/2007, 10h09
  4. problème avec le mot clé "virtual"
    Par Leole dans le forum C++
    Réponses: 6
    Dernier message: 02/11/2007, 11h51
  5. Mot clef virtual, classes filles
    Par NiamorH dans le forum C++
    Réponses: 6
    Dernier message: 13/10/2007, 13h34

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