Probleme avec c++

Résolu/Fermé
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 - Modifié par chabacha109 le 26/12/2010 à 17:54
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 - 26 déc. 2010 à 18:00
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

Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 327
26 déc. 2010 à 17:08
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
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 9
Modifié par chabacha109 le 26/12/2010 à 18:02
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