Bonjour,
J'ai un soucis avec l'héritage d'une méthode virtuelle.
Supposons que l'on ait les classes suivantes:
Classe Mere.h
Classe Mere.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Mere { virtual void print() const; double m_membre1; }
Classe Fille.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void Mere::print() const { std::cout<<"\t"<<m_membre1; }
Classe Fille.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 classe Fille : public Mere { virtual void print() const; double m_membre2; }
Classe User.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void Fille::print() const { Mere::print(); std::cout<<"\t"<<m_membre2; }
Classe User.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Classe User { void initialize(int age); Mere m_femme; }
Je ne comprends pas pourquoi lorrsque l'on construit une Fille, c'est quand même la méthode print() de la classe Mere qui est appelée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void User::initialize(int age) { if(age>18) { m_femme = Mere(); } else { m_femme = Fille(); } m_femme.print(); // dans tous les cas appelle Mere::print() et donc n'affiche que m_membre1 }
Et comment faire pour que Fille::print() soit appelée?
Merci de votre aide.
Partager