Bonjour tout le monde,
Comme le dit le titre, j'ai un soucis avec l'héritage.
Je possède les classes suivantes :
Arbre :
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 :
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 :
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 :
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 !
Partager