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
| /* cette fonction considérera ton objet de type B comme étant de type
* A et est particulièrement dangereuse à l'emploi (slicing)
*/
void nonPolymporhe( A a){
a.foo(); // affichera toujours "je suis un A" quoi qu'il advienne
}
/* ici, nous pouvons utiliser le polymoprhisme parce qu'on utilise une référence*/
void polymorphByRef( A /*const */ & a){
a.foo(); // affichera "je suis un A" si c'est vraiment un A qui est fourni en paramètre
// et "je suis un B" si c'est en fait un B
}
/* Meme chose, mais transmission par pointeur */
void polymorphByPtr( A * a){
a.foo(); // affichera "je suis un A" si c'est vraiment un A qui est fourni en paramètre
// et "je suis un B" si c'est en fait un B
}
int main(){
A a;
B b;
nonPolymporhe(a);
nonPolymporhe(b);
polymorphByRef(a);
polymorphByRef(b);
polymorphByPtr(&a);
polymorphByPtr(&b);
}; |
Partager