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:
};
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 &param);
        BayesianModelDataType(const IMathematicalParametrizedFunction &fun);
        virtual ~BayesianModelDataType();
 
    protected:
    private:
    IMathematicalParametrizedFunction _fun;
    std::string _informedParameterOfParentFunction;
};
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
BayesianModel::BayesianModel(const BayesianModelDataType &data) : KaryTree(data) // lui il a besoin d'un argument const DataTypeForTree
{
    //ctor
}
Je crois qu'il y a un DataTypeForTree &rBase = cDerived à caser dans la liste d'initialisation mais
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 !