Fonction virtuel et classe fille

Le problème exposé dans ce sujet a été résolu.

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 ?

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.

+5 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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