Programmation C++/Polymorphisme
Polymorphisme
modifierLe 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
modifierSoit une classe A implémentée de la manière suivante :
class A
{
public:
int compare(A autre); // compare deux objets A
static void sort(A** tableau_de_a,int nombre); // tri
};
La méthode statique sort
effectue le tri du tableau en appelant la méthode compare
.
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 :
class B : public A
{
public:
int compare(A autre); // compare deux objets A
};
Problème
modifierSi on a un tableau de pointeur sur des objets B, la méthode compare
appelée par la fonction de tri est celle de la classe A, car la fonction a pour paramètre un tableau de pointeur sur des objets A. Ce comportement n'est pas polymorphique.
Solution
modifierPour que la méthode appelée soit celle de la classe B, il faut qu'elle soit déclarée virtuelle (virtual
) dans la classe de base :
class A
{
public:
'''virtual''' int compare(A autre); // compare deux objets A
static void sort(A** tableau_de_a,int nombre); // tri
};
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.
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.