Fonction virtuel et classe fille

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

C'est une petite demande d’éclaircissement. Lorsqu'il y a une classe fille qui dérivent d'une classe elle même fille, on voit parfois que les fonctions virtuels de la classe mère sont toujours ré-definie comme virtuel dans les classes filles, petites-filles etc.

exemple :

 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
class A
{
   public:
    virtual void f() {std::cout<<"A"<<std::endl;}
};
class B: public A
{
   public:
   virtual void f() {std::cout<<"B"<<std::endl;}
};
class C: public B
{
   public:
   virtual void f() {std::cout<<"C"<<std::endl;}
};

int main() 
{ 
     B b; 
     C c; 

     A * pab = &b; 
     A * pac = &c;
     B * pbc = &c; 

     pab->f();
     pac->f();
     pbc->f();
}

Or si j’enlève le "virtual" dans les classes B et C ça ne change pas le résultat du code.

Y a-t-il une raison de mettre ce "virtual" ?

J'en voie une : rappeler au développeur qui gère une sous-sous-sous-etc classe que la fonction d'origine est virtuel. Mais y a-t-il une raison plus technique ?

+0 -0

Cette réponse a aidé l'auteur du sujet

Salut.

Pour virtual, aucune différence. Une fonction virtuelle dans une classe mère l'est automatiquement dans une classe fille si celle-ci redéfinit la fonction. Là où ça pose une différence, c'est avec le spécificateur override. Si une fonction déclarée override dans une classe fille n'est pas déclarée et virtuelle dans une classe mère, cela provoque une erreur de compilation.

Mon Github | Mantra : Un Entity-System en C++

+5 -0
Auteur du sujet

Nickel merci !

Si j'ai bien compris override est juste la pour informer le prochain humain qui passe dan le programme que l'on modifie une fonction virtuel et pour aider lors des erreurs de compilation.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte