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

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 10 :
 
Soit une classe A implémentée de la manière suivante :
<sourcesyntaxhighlight lang=c++>
class A
{
Ligne 17 :
static void sort(A** tableau_de_a,int nombre); // tri
};
</syntaxhighlight>
</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 :
<sourcesyntaxhighlight lang=c++>
class B : public A
{
Ligne 28 :
int compare(A autre); // compare deux objets A
};
</syntaxhighlight>
</source>
 
== Problème ==
Ligne 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 :
<sourcesyntaxhighlight lang=c++>
class A
{
Ligne 44 :
static void sort(A** tableau_de_a,int nombre); // tri
};
</syntaxhighlight>
</source>
 
La fonction de tri appellera alors la méthode selon le type réel des objets, même en utilisant un pointeur sur des objets A.