Probleme avec c++

Résolu
chabacha109 Messages postés 326 Statut Membre -  
chabacha109 Messages postés 326 Statut Membre -
Bonjour,

mes questions seront plus précise aujourd'hui:

class A
{
public:
void afficher();
};

void A::afficher()
{
cout<<"je suis le A";
}

class B:public A
{
public:
void afficher();
};

void B::afficher()
{
cout<<"je suis le B";
}

void main()
{
A a;
a.afficher();//il va afficher je suis a

B b;
b.afficher();//il va afficher je suis le b
}
//jusqu'à maintenant je suis d'accord avec le résultat,
le a est une instance de A , le b est une instance de B donc le résultat est évident :)

mais mon problème est la:

class A
{
public:
void xxx();
void afficher();
};

void A::xxx()
{
afficher();
}

void A::afficher()
{
cout<<"je suis le A"<<endl;
}

class B :public A
{
public:
void afficher();
};

void B::afficher()
{
cout<<"je suis le B"<<endl;
}

void main()
{
A a;
a.xxx();//ici il affiche je suis le A c'est normale il est une insance de A....

B b;
b.xxx();//ici mon probléme "je suis le A"
}
le b est déclaré comme une instance de la class B , et il déclanche la metode de A ????
je sait qu'il manque le mot clé virtual dans la classe de base virtual void afficher()

mais dans le premier version elle est sans "virtual" ,et marche bien :(

j'espère que mon question est claire

1 réponse

  1. Yoan Messages postés 11905 Statut Modérateur 2 356
     
    Tu n'as pas fait de surchage pour la méthode xxx() et la classe B. Il n'y a pas de xxx() pour B.

    Mais B hérite de A, donc y compris de sa méthode xxx(). Donc en appelant b.xxx(); c'est bel-et-bien la méthode définie dans la classe A que tu appelles.
    1
    1. chabacha109 Messages postés 326 Statut Membre 9
       
      bonjour merci de ton réponse ^_^

      bon
      si je fait ca;

      class A
      {
      public:
      void xxx();

      virtual void afficher();
      };

      void A::xxx()
      {
      afficher();
      }


      void A::afficher()
      {
      cout<<"je suis le A"<<endl;
      }

      class B :public A
      {
      public:
      void afficher();
      };


      void B::afficher()
      {
      cout<<"je suis le B"<<endl;
      }


      void main()
      {
      A a;
      a.xxx();//ici je suis le A
      B b;
      b.xxx();//ici je suis le B
      }

      //ici il je suis le A
      //ici "je suis le B
      qu'est-qu'il passe exactement si j'ajoute ce "virtual", c'est mon probléme
      0