Bonjour tout le monde,

Comme le dit le titre, j'ai un soucis avec l'héritage.

Je possède les classes suivantes :

Arbre :
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
#ifndef _ARBRE_H
#define	_ARBRE_H
 
#include"foret.hpp"
 
class Arbre{
 
    public :
        Foret* foret;
        Arbre();
};
 
Arbre::Arbre(){
    foret=NULL;
}
 
#endif	/* _ARBRE_H */
Les instances d'Arbre contiennent donc un pointeur sur une Foret.


Foret :
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
#ifndef _FORET_H
#define	_FORET_H
 
class Arbre;
 
class Foret {
	private :
	    Arbre* premierArbre;
	    Foret* reste;
 
	public:
	    Foret(){    
            premierArbre=NULL;
            reste=NULL;
        }
 
	    Arbre* getPremierArbre(){
            return premierArbre;
        }
 
};
 
#endif	/* _FORET_H */
Les instances de foret contiennent donc une Foret et un Arbre.



Jusque là tout va bien. Mon problème survient quand je souhaite dériver la classe Arbre.

En effet je souhaite créer des arbres binaires.

Le problème est que quand je manipule l'attribut Arbre<T>::foret d'un ArbreBinaire, j'ai une instance de Foret qui contient des Arbres et pas des ArbresBinaires.

Voici la classe ArbreBinaire :

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
#ifndef _ARBREBINAIRE_H
#define	_ARBREBINAIRE_H
 
#include"arbre.hpp"
 
class ArbreBinaire: public Arbre{
 
    public:
        ArbreBinaire();
        ArbreBinaire* fonction();
};
 
ArbreBinaire::ArbreBinaire() : Arbre(){
}
 
ArbreBinaire* ArbreBinaire::fonction(){
    if(Arbre::foret!=NULL)
        return Arbre::foret->getPremierArbre();
    else
        return NULL;
}
 
#endif	/* _ARBREBINAIRE_H */
A la compilation j'ai donc une erreur dans "fonction" du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
invalid conversion from Arbre* to ArbreBinaire*
Ma question est donc comment faire pour que la foret que je manipule contienne des ArbreBinaires ?

Faut-il que je redérive Foret en ForetBinaire ? Mais dans ce cas un ArbreBinaire contiendrait un attribut ForetBinaire ainsi qu'un attribut Foret qu'il hérite d'Arbre. Ce qui n'est peut être pas très propre ?

Ou alors y at-t-il une astuce (genre un cast) qui pourrait résoudre mon problème (mais les cast ne sont pas très propre non plus ?


Merci d'avance !