Bonjour à toutes et à tous,
Je suis tout nouveau tout neuf !
J'ai créé une classe pour représenter un arbre :
Je sais qu'il y a beaucoup de pointeurs et qu'on peut peut-être s'en passer, mais ce sera dans un second temps, là j'essaie surtout de faire mes dents
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 TreeNode { public: TreeNode* m_parent; TreeNode() ; TreeNode(DataTypeForTree data) ; TreeNode(DataTypeForTree data, int ID) ; TreeNode(DataTypeForTree data, std::vector<TreeNode* > children) ; TreeNode(DataTypeForTree data, std::vector<TreeNode* > children, int ID) ; ~TreeNode() ; void SearchDeepFirst (VisitorInterface* visitor) ; int GetID(void) const ; void SetChildren (std::vector<TreeNode* > children) ; void SetParent (TreeNode* parent); void Accept(VisitorInterface* visitor); private: std::vector<TreeNode* > m_children ; DataTypeForTree m_data ; int m_ID ; };
Je voudrais savoir comment je peux faire pour accéder intelligemment aux données contenues dans chaque node, encapsulées dans m_data. cet attribut m_data est un objet, qui peut être assez compliqué (pour l'instant c'est volontairement très simple, mais ça va pas le rester très longtemps)
Le code pour le visiteur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class ExampleData : public DataTypeForTree { public: ExampleData(); ExampleData(int value); virtual ~ExampleData(); int getValue(); private: int m_value; };
Bref vous vous douterez bien que ça ne marche pas, le compilateur m'interdit l'accès à m_data qui est privé. Du coup je me demandais si c'était le bon moment d'utiliser l'amitié entre classes ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class VisitorDataToString : public VisitorInterface { public: VisitorDataToString(); virtual ~VisitorDataToString(); void visitNode(TreeNode* node){ std::cout << node->m_data.GetValue(); } protected: private: };
Merci d'avance pour vos réponses,
Bien cordialement,
Partager