Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
fonction_virtuel [2015/02/16 16:44] woly |
fonction_virtuel [2018/07/20 23:41] (Version actuelle) winjerome Ajout des liens vers les chapitres précédent/suivant |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ | + | ^ [[polymorphisme_et_pointeurs|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[invariant_de_classe|Chapitre suivant]] ^ |
====== Fonctions virtuelles ====== | ====== Fonctions virtuelles ====== | ||
Ligne 59: | Ligne 59: | ||
+ | * destructeur virtuel | ||
+ | * MyClass::foo pour appeler explictement le parent | ||
+ | ===== Redefinition et masquage ===== | ||
+ | Masquage de nom (hide name) = fonction dans la classe derive a le meme nom que la classe parent, et empeche de voir la fonction de la classe parent. | ||
+ | <code cpp> | ||
+ | struct A { | ||
+ | void f(); | ||
+ | }; | ||
+ | |||
+ | struct B : A { | ||
+ | void f(); | ||
+ | }; | ||
+ | </code> | ||
+ | |||
+ | Probleme avec polymorphisme : risque d'erreur sur la fonction appellee. | ||
+ | |||
+ | <code> | ||
+ | auto p = new B; | ||
+ | auto q = static_cast<A*>(p); | ||
+ | </code> | ||
+ | |||
+ | Differents cas : | ||
+ | |||
+ | <code cpp> | ||
+ | struct A { | ||
+ | virtual void f(); | ||
+ | }; | ||
+ | |||
+ | struct B : A { | ||
+ | virtual void f(int); | ||
+ | }; | ||
+ | </code> | ||
+ | |||
+ | + override + final + signature differente | ||
- | * masquage de fonctions | ||
- | * destructeur virtuel | ||
- | * MyClass::foo pour appeler explictement le parent | ||
- | ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ | ||
- | {{tag> Cours C++}} | + | ^ [[polymorphisme_et_pointeurs|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[invariant_de_classe|Chapitre suivant]] ^ |