fonction virtuelles (slicing)
bonjour ,
je suis entrain d'etudier le c++ sur un livre et je suis arrive a l'heritage .
et voila que je me retrouve dans un sous chapitre ou je n'ai presque rien compris << les fonctions virutelles >> .
dans ce code , j'ai pas compris l'interet de mettre virtual dans la classe mere (mammifere) et pourquoi les fonctions ont donne un resultat different , alors que si on enleve virtual les fonctions donnent le meme resultat a savoir utiliser la fonction crier Mammifere .
Voila je compte sur votre aide pour m'expliquer ce qu'il y'a a comprendre sur les fonctions virtuelles parceque cette notion m'a l'air importante et je suis vraiement loin de l'avoir assimile .
Merci de m'avoir lu.
voila le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include<iostream>
using namespace std;
class Mammifere
{
public:
Mammifere():w_age(1){}
~Mammifere() {}
virtual void crier() const {cout<<"les mammiferes ont la parole..."<<endl;}
protected:
int w_age;
};
class Chien : public Mammifere
{
public:
void crier ()const {cout<<" WARFff..."<<endl;}
};
void valfonction(Mammifere Mammifere_val)
{
Mammifere_val.crier();
}
void ptrfonction(Mammifere* p_Mammifere)
{
p_Mammifere->crier();
}
int main()
{
Mammifere *ptr=0;
ptr = new Chien;
valfonction(*ptr);
ptrfonction(ptr);
system("PAUSE");
return EXIT_SUCCESS;
} |
Resultat compilation
Code:
1 2 3
|
les mammiferes ont la parole...
WAARff.... |