« 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).
▲
== 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
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.
|