IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

[Debutant] Problème d'héritage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 121
    Par défaut [Debutant] Problème d'héritage
    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 !

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    N'aurais pas tu intérêt à templatiser Foret si tu veux qu'elle soit fortement liée au type de l'arbre ?

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    il me semble qu'il faut virtualiser les fonctions de Arbre surchargées par arbrebinaire


    Par contre, je ne suis pas sûr que ça suffise, peut-être faut-il en plus utiliser un reinterpret_cast (à confirmer, je ne suis pas tres calé sur le sujet).


    bonne chance

Discussions similaires

  1. [DEBUTANT] Probléme avec l'héritage
    Par BRAUKRIS dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 20h22
  2. [DX9] [Debutant] Problème de transparence :(
    Par SekYo dans le forum DirectX
    Réponses: 5
    Dernier message: 10/09/2004, 14h19
  3. [Debutant] Problème de sécurité dans un applet
    Par peaceinpal dans le forum Applets
    Réponses: 3
    Dernier message: 09/09/2004, 20h56
  4. [debutant]Problèmes
    Par BibiGmi dans le forum OpenGL
    Réponses: 2
    Dernier message: 05/03/2004, 14h00
  5. [Debutant] Problème du linker [Dev-c++4]
    Par Macdir dans le forum Dev-C++
    Réponses: 3
    Dernier message: 30/05/2003, 20h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo