Bonjour à toutes et à tous !
Je me débats toujours avec mes objets, et déséspère parfois d'en voir le bout, mais quitte à être pris en flagrant délit d'optimisme forcené, je dirais que "si ça ne stagne ni ne régresse, ça progresse forcément"...
J'avais implémenté une classe généraliste pour un arbre n-aire. Il se trouve que deux classes sont vouées à en dériver, la classe BayesianModel et la classe Lineage. Pour avoir de la flexibilité sur le type de données que contient l'arbre et n'implémenter les algorithmes de parcours qu'une seule fois, j'ai encapsulé les données dans chaque noeud dans un champs _data de classe "DataTypeForTree*", de laquelle dérive notamment la classe "BayesianModelData" (pour les Lineages on verra plus tard).
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
22
23
24 class KaryTree { public: // Constructors KaryTree* _parent; KaryTree(const DataTypeForTree &data); KaryTree(DataTypeForTree &data, std::vector<KaryTree* > children); ~KaryTree() ; // Setter/Getter DataTypeForTree* GetData(void); void SetChildren (std::vector<KaryTree* > children); void SetParent (KaryTree* parent); // Traversal algorithms void SearchDeepFirst (const VisitorInterface & visitor); void Accept(const VisitorInterface & visitor); private : std::vector<KaryTree* > _children; //private because it is the core of this class protected : DataTypeForTree* _data; // protected because it can change in the derived classes };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class BayesianModel : public KaryTree { public: BayesianModel(const BayesianModelDataType &data); virtual ~BayesianModel(); //[...] protected: private: };Dans la liste d'initialisation du constructeur de BayesianModel, j'appelle le constructeur de KaryTree. Seul souci, la classe de données nécessaire n'est pas la même :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class BayesianModelDataType : public DataTypeForTree { public: BayesianModelDataType(const IMathematicalParametrizedFunction &fun, const std::string ¶m); BayesianModelDataType(const IMathematicalParametrizedFunction &fun); virtual ~BayesianModelDataType(); protected: private: IMathematicalParametrizedFunction _fun; std::string _informedParameterOfParentFunction; };
Je crois qu'il y a un DataTypeForTree &rBase = cDerived à caser dans la liste d'initialisation mais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 BayesianModel::BayesianModel(const BayesianModelDataType &data) : KaryTree(data) // lui il a besoin d'un argument const DataTypeForTree { //ctor }
1) J'en suis pas sûr
2) Si c'est le cas, je ne sais pas comment l'écrire
3) Pourriez-vous me guider ?
Merci d'avance de votre aide !
Partager