Ce petit bout de code permet de comprendre l'utilité du mot "virtual" pour les fonctions.
Il permet de voir quelle fonction est appelée par une instance de la classe suivant si la fonction est virtuelle ou non.
Le zip est contient un projet CodeBlocks. Si vous utilisez un autre logiciel, récupérez le CPP.
Source / Exemple :
#include <iostream>
class A
{
public:
A()
{
std::cout << "Construction A" << std::endl;
}
virtual ~A()
{
std::cout << "Destruction A" << std::endl;
}
virtual void QuiSuisJe()
{
std::cout << "Je suis A" << std::endl;
}
void QuiSuisJeNonVirtuel()
{
std::cout << "Je suis A" << std::endl;
}
};
class B:public A
{
public:
B()
{
std::cout << "Construction B" << std::endl;
}
~B()
{
std::cout << "Destruction B" << std::endl;
}
virtual void QuiSuisJe()
{
std::cout << "Je suis B" << std::endl;
}
void QuiSuisJeNonVirtuel()
{
std::cout << "Je suis B" << std::endl;
}
};
int main()
{
A * a_B = new B(); // construction de A et B mais attribution du pointeur à un objet de type A
a_B->QuiSuisJe(); // affiche "Je suis B"
a_B->QuiSuisJeNonVirtuel(); // affiche "Je suis A" : la fonction de la classe de base est appelée
B * b = new B(); // construction de A et B et attribution du pointeur à un objet de type B
b->QuiSuisJe(); // affiche "Je suis B"
b->QuiSuisJeNonVirtuel(); // affiche "Je suis B"
delete a_B;
delete b;
return 0;
}
Conclusion :
Les fonctions QuiSuisJe et QuiSuisJeNonVirtuel sont les mêmes au mot clé "virtual" près...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.