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 :
où jeu[] est un tableau statique d'objets 'cartes' et d une instance de l'objet 'donne' qui comprend justement le membre 'jeu'
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(d.jeu[i] == d.jeu[j])
J'ai donc codé une surcharge de l'opérateur ==, dans la classe mère on a :
et dans les classe filles, par exemple dans la classe "cartesimple" ça donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual bool operator == (carte&) = 0;
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 ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Est-ce que quelqu'un voit où peut se situer le problème ?
Partager