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 :
Ecrit dans la console :
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; }
Bon vous allez me dire ouai où il veut en venir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 A B C
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 :
(Voir même de mettre virtual char test()... pour la méthode de la class C, fin structure ça revient au même)
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';} };
Alors que ce qui suit marche parfaitement mais look strange
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 ?
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';} };
Merci d'avance
Partager