Bonjour,
J'ai un problème qui doit être conceptuel concernant l'héritage et le polymorphisme.
J'ai défini une collection d'objects Ai Aj Ak qui héritent tous d'une classe mère A.
La collection est stockée dans un vecteur de pointeurs sur A vector<A*> vect;.
Le vecteur est sûr rempli en utilisant les constructeurs spécialisés, i.e. Ai, Aj, Ak (voire A).
Chacune des classes possède une fonction spécialisée func (définie virtuelle) qui est propre à chaque type de classe.
Aussi, dans mon programme, j'ai bien vérifié que la liaison dynamique fonctionne, c'est à dire que vect[i]->func() appelle bien A::func, Ai::func, Aj::func, ou Ak::func selon le type des instances parcourues.
Mon problème: j'ai défini une fonction extérieure compare(A*,A*) afin de comparer les instances de mon vecteur.
Cette fonction appelle ma fonction func. Mais quoiqu'il arrive, C++ n'arrive pas à faire la liaison dynamique vers les fonctions spécialisées, et appelle toujours A::func.
Soit.
J'ai tenté de surcharger compare avec tous les cas possibles :
Mais bien sûr cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 compare(A*,A*) compare(A*,Ai*) compare(A*,Aj*) compare(A*,Ak*) etc...
Je vois bien que pour func, j'ai du déclarer la fonction virtual pour que les liaisons correctes se fassent, et que pour compare, je ne fait rien, donc je sens que mon problème est là. A moins que...
Des indices ?
Merci d'avance,
xflr6
Partager