class vehicle
{
public:
virtual void drive()
{
cout<<"in vehicle drive"<<endl;
}
};
class bus:public vehicle
{
public:
void drive()
{
cout<<"in bus drive"<<endl;
}
};
class supervehicle:public bus
{
public:
void drive()
{
cout<<"in supervehicle"<<endl;
}
};
int main()
{
bus *b;
b=new supervehicle();
b->drive();
return 0;
}
Je me attendais ouput comme « dans le lecteur de bus », mais la sortie est « dans supervehicle ». Si le mot-clé virtuel est associé à la méthode du lecteur dans la classe de bus, la sortie doit être dans le lecteur de bus. Je sais que nous avons hérité de la classe du véhicule, mais nous avons quand même créé le pointeur pour la classe de bus uniquement. Est-ce que quelqu'un pourrait m'aider pourquoi le mot-clé virtuel dans la classe de de véhicule affecte la méthode de la classe de de bus et où ai-je manqué le point?méthode dans la classe dérivée obtenu exécutée sans * mot-clé virtuel * dans la catégorie visée
http://www.cppreference.com/w/cpp/language/virtual. Cela n'a rien à voir avec l'héritage virtuel. – chris
http://stackoverflow.com/questions/41604948/not-defining-virtual-method-in-derived-class-as-well/41606164#41606164 – sameerkn
Pas sur le point, mais 'bus * b; b = nouveau supervehicle(), 'devrait être' bus * b = nouveau supervehicle(), '. Prenez l'habitude d'initialiser les variables lorsque vous les créez. –