heritage, substitution et std::list
Bonjour,
Je suis face à un problème dans un projet de cpp assez conséquent (à ma petite échelle tout du moins) avec de l'opengl . Je vais essayer de vous synthétiser mon problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
/**
* Classe représentant l'entité de base de la représentation des mobiles. Ces entitées
* sont lié dans une structure d'abres les unes aux autres pour former un mobile.
* expl : la brique Tete est lié à la brique corps du personnage qui est lié aux briques
* bras etc ...
*/
class Brique {
protected:
/**
* vecteur des briques suivantes dans l'arbre
*/
std::vector<Brique> suivants;
public:
/**
* Constructeur
*/
Brique(...);
/**
* Fonction dessinant la brique
*/
virtual void dessinerBrique();
};
class Brique_particulaire: public Brique {
public:
/**
* Constructeur
*/
Brique_particulaire(...);
/**
* Fonction dessinant la brique particulaire
*/
void dessinerBrique();
};
/**
* Un mobile est un objet affichable constitué d'un arbre de briques
*/
class Mobile {
protected:
/**
* Arbre des briques de ce modele.
*/
Brique* arbre_briques;
public:
blabla...
/**
* Constructeur
*/
Mobile() {
}
/**
* dessine le mobile en parcourant recursivement toutes ses briques et
* les dessinant une a une les unes par rapport aux autres
*/
void dessinerMobile();
};
/**
* Un projectile est un mobile particulier qui contient uniquement une brique particulaire
*/
class Projectile: public Mobile {
public:
Projectile();
};
/**
* \class Mobiles_liste : Classe liste de tout les mobiles utile pour
* l'affichage entre autre.
*/
class Mobiles_liste : public std::list<Mobile> {
public :
/**
* Fonction affichant tout les mobiles
*/
void draw() {
for (std::list<Mobile>::iterator it = this->begin(), end = this->end(); it != end; ++it) {
it->dessinerMobile();
}
}
}; |
Mon problème est le suivant : lorsque je mets un Projectile dans la Mobile_liste son affichage se fait comme si la brique dans projectile n’était pas particulaire mais simplement une brique. C'est à dire qu'il va faire appelle à Brique::dessinerBrique(); au lieu de faire appelle à Brique_particulaire::dessinerBrique();
Je ne comprends pas pourquoi et je n'arrive pas à contourner le problème...
En espérant avoir été suffisamment clair, merci par avance :D