Bonjour,
Je suis actuellement géné par un problème d'héritage.
J'ai une classe template "Hierarchy" que je voudrais faire hériter à certains objets. Cela permettrai à un objet qui en hérite d'avoir la possibilité d'ajout de fils.
Je vais essayer d'illustrer un peu mes propos :
J'ai une classe Hierarchy comme suis.
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 template <typename T> class Hierarchy { public: Hierarchy (); ~Hierarchy(){}; void setParent(T * parent){ ... }; // set le pere T * parent(){ return _parent;}; // retourne le pere void addChild(T * child){ ...}; // ajoute un fils std::list<T*> & children() {...}; // retourne la liste de fils protected: std::list <T*> _children; T * _parent; };
Et voudrais qu'un objet, par exemple "Item", qui en hérite puisse avoir une liste de fils et la possibilité d'avoir un père.
Le tout en faisant un simple héritage, sans surcharger ou réimplémenter aucune fonction, du style :
En pratique ça donnerai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Item : public Hierarchy { public: Item () : Hierarchy(); ~Item(){}; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Item * pere = new Item(); Item * fils1 = new Item(); Item * fils2 = new Item(); pere->addChild(fils1); pere->addChild(fils2); for (int i = 0; pere->children().size; i++) { Item * currentChild = pere->children().at(i); //Sans devoir faire de cast }
Avec la méthode que j'ai fait je suis obligé de caster un objet de type T en un objet Item avant de m'en servir, ou encore réimplémenter les fonctions dans la classe Item. Je voudrais éviter cette étape.
Merci à ceux qui pourront m'éclairer sur la façon dont il faut faire.
Partager