Bonjour,

J'ai utilisé le design pattern composite pour me créer des classes qui parcourt des fichiers et répertoires. Cependant, dans une fonction héritée du composite, je n'arrive pas à accéder à un attribut. Voici le schéma :

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
class Composant {
protected:
	const char* _root; /**< Le path ABSOLU du composant */
 
public:
	virtual const char* getPath() = 0;
	virtual void searchContent() = 0;
};
 
class Repertoire: public Composant { //Le composite
protected:
	vector<Composant*> _contient; /**< Un tableau des composants */
 
public:
	Repertoire(const char* root);
	virtual ~Repertoire();
 
	virtual const char* getPath();
	virtual void searchContent();
};
La fonction héritée du composite :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
class RepTraining: public Repertoire { //hérite du composite
public:
	RepTraining(const char* root);
	virtual ~RepTraining();
 
	const char* getNameSubdirectory(int index);
	virtual void searchContent();
	virtual const char* getPath();
};
Dans ma fonction getNameSubdirectory, je veux accéder au n-ième élément du vector composite, récupérer son chemin (_root) et après modifications, le renvoyer.
Cependant, il me renvoit toujours un mauvais chemin (qui ressemble plus au _root de RepTraining qu'aux répertoires qu'il contient...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
const char* RepTraining::getNameSubdirectory(int index)
{
	Repertoire* test = static_cast<Repertoire*>(_contient.at(index));
	std::string truncateName = test->getPath(); //PAS BON
 
        .....
}
Je n'ai pas encore compris toutes les subtilités de l'héritage, et je ne vois pas du tout mon erreur...
Merci d'avance