« Programmation C++/Polymorphisme » : différence entre les versions

Contenu supprimé Contenu ajouté
m Formatage, ajout de code
Aucun résumé des modifications
Ligne 1 :
<noinclude>{{Programmation C++}}</noinclude>
== Polymorphisme ==
 
== Polymorphisme ==
<!-- Note d'édition : ne pas confondre avec la surcharge, où les fonctions peuvent avoir un même nom, mais différents types de paramètres -->
 
Le polymorphisme est une fonctionnalité de l'héritage : la capacité d'appeler une méthode en fonction du type réel d'un objet (sa classe).
 
<!-- Note d'édition : {{remarque|ne pas confondre avec la surcharge, où les fonctions peuvent avoir un même nom, mais différents types de paramètres -->.}}
 
== Exemple ==
 
Soit une classe A implémentée de la manière suivante :
<source lang=c++>
class A
{
Ligne 15 ⟶ 17 :
static void sort(A** tableau_de_a,int nombre); // tri
};
</source>
 
La méthode statique <code>sort</code> effectue le tri du tableau en appelant la méthode <code>compare</code>.
 
Soit une classe B héritant de A, ayant un critère supplémentaire de comparaison. Il faut donc une nouvelle version de la méthode de comparaison :
<source lang=c++>
class B : public A
{
Ligne 23 ⟶ 28 :
int compare(A autre); // compare deux objets A
};
</source>
 
== Problème ==
Ligne 31 ⟶ 37 :
 
Pour que la méthode appelée soit celle de la classe B, il faut qu'elle soit déclarée virtuelle (<code>virtual</code>) dans la classe de base :
<source lang=c++>
class A
{
Ligne 37 ⟶ 44 :
static void sort(A** tableau_de_a,int nombre); // tri
};
</source>
 
La fonction de tri appeleraappellera alors la méthode selon le type réel des objets, même en utilisant un pointeur sur des objets A.
 
En fait, le compilateur construit une table des fonctions virtuelles pour les classes A et B et les autres sous-classes, et chaque objet créé possède un pointeur vers cette table.
 
[[Catégorie:Programmation C++ (livre)]]