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
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 Mere.cpp
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.h
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 Fille.cpp
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.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Classe User
{
  void initialize(int age);
  Mere m_femme;
}
Classe User.cpp
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
}
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.
Et comment faire pour que Fille::print() soit appelée?

Merci de votre aide.