surcharge de l'opérateur de comparaison et polymorphisme
Bonjour,
Voilà ça devait arriver, j'ai un nouveau problème et comme la dernière fois c'est ici qu'on m'a sorti de la galère (notamment loulou24), je suis de retour.
J'écris un code (c'est un devoir de fac) qui permet de tirer et d'afficher un certain nombre de cartes dans un jeu de tarot qui comprend 3 catégories de cartes appelées 'oudlers', 'atouts' et 'cartesimple'.
Il y a une classe abstraite "carte" et 3 les autres qui dérivent de celle-ci
Le code fonctionne bien avec une fonction virtuelle hasard() pour tirer une carte et afficher() pour l'afficher.
La où ça s'est compliqué c'est quand on nous demande de ne pas tirer 2 fois la même carte.
Je voulais comparer 2 cartes de n'importe laquelle des 3 catégories :
Code:
if(d.jeu[i] == d.jeu[j])
où jeu[] est un tableau statique d'objets 'cartes' et d une instance de l'objet 'donne' qui comprend justement le membre 'jeu'
J'ai donc codé une surcharge de l'opérateur ==, dans la classe mère on a :
Code:
virtual bool operator == (carte&) = 0;
et dans les classe filles, par exemple dans la classe "cartesimple" ça donne :
Code:
1 2 3 4 5 6 7 8
| bool carteSimple::operator == (carte& c) {
carteSimple* b = dynamic_cast<carteSimple*>(&c);
if(b -> valeur == valeur)
return(true);
else
return(false);
delete b;
} |
L'opérateur dynamic_cast me permet bien d'accéder à la valeur de la carte, par polymorphisme : j'ai vérifié que b->valeur fournissait la bonne valeur. Mais apparemment, b->valeur et valeur sont toujours égaux. Alors qu'en invoquant 'valeur', je croyais m'adresser à l'instance courante et non pas à la carte passée en paramètre ???
Est-ce que quelqu'un voit où peut se situer le problème ?