Bonjour,
J'ai un problème lié à l'héritage et je ne sais pas comment le résoudre.
J'ai deux classes Goomba et Koopa qui héritent chacune de ma classe Entity. Ma classe Zone contient comme attribut une collection hétérogène d'Entity contenant donc des pointeurs vers des instances de Goomba et de Koopa. J'ai ajouté une méthode changerOrientation() à la classe Koopa qui n'est pas dans Entity et j'aimerais pouvoir l'utiliser depuis ma classe Zone. Je ne vois pas comment faire.
Mon attribut(La collection hétérogène) dans la classe Zone
La classe Koopa :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::deque<Entity*> m_entites;
La fonction dans Zone censée utiliser changerOrientation()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef KOOPA_H_INCLUDED #define KOOPA_H_INCLUDED #include "Entity.h" class Koopa : public Entity { public: Koopa(float x, float y); void seDeplacer();//vp void sAnimer();//vp void changerOrientation(); private: bool m_orientationDroite;//true s'il regarde à droite false sinon }; #endif // KOOPA_H_INCLUDED
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void Zone::horsZone() { unsigned int t(m_entites.size()), i; for(i = 0; i<t; ++i) { if(m_entites[i]->getPosition().y > m_origine.y + m_hauteur)//si on est en dessous de la zone { rearanger(i); } else if(m_entites[i]->getPosition().x < m_origine.x || m_entites[i]->getPosition().x > m_origine.x + m_largeur)//si on est à gauche ou à droite de la zone { if (typeid(*m_entites[i]) == typeid(Koopa)) { m_entites[i]->changerOrientation(); } } } }
Partager