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 :

Probl�me avec le polymorphisme


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par d�faut Probl�me avec le polymorphisme
    Bonjour,

    Apr�s quelques recherches infructueuses sur le forum, je vous pose mon probl�me.

    Voila, j'ai deux classes m�res ind�pendantes que j'appelrais M et N, et des classes filles m1, m2, n1 et n2 heritant de M ou N.
    Dans les classes m1 et m2, je d�clare un attribut n1 dans m1 et n2 dans m2.
    Jusque l� aucune difficult�. Mais voila, ailleurs dans mon code, je g�re une liste de M* pour y stocker indefferement des m1* ou m2*. L� ou est le probl�me, c'est que je voudrais pouvoir acceder de maniere transparente a mes attributs n1 ou n2 ( qui heritent de N ), mais je n'y arrivent pas puisqu'ils sont differents.
    Y aurait il une solution plus �l�gante que de passer par une m�thode virtual dans la classe M retournant un void ( genre void* getN() = 0 ) ?

    J''esp�re que j'ai �t� assez explicite.

    Merci.

  2. #2
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut
    Salut,

    Il te suffit de retourner un N* ou N&.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par d�faut
    Effectivement, j'avais declarer des attributs n1 et n2 dans mes classes filles, alors qu'il fallait declarer un N* dans ma classe M. Et l�, plus de probl�me ( y a des jours o� on passe � cot� d'�vidences , c'est effrayant ).

    Je te remercie pour la reponse rapide.

  4. #4
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut
    Pas forc�ment. Tu peux tr�s bien avoir besoin du type exact de n dans tes classes m, et vouloir pourtant retourner un type N aux classes clientes. Donc une autre solutinoserait :

    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
    25
    26
    27
     
    class M {
        public:
            virtual N* getN() =0;
    };
     
    class M1 {
        public:
            virtual N* getN() {
                return n;
            }
     
        protected:
            N1* n;
    };
     
     
     
    class M2 {
        public:
            virtual N* getN() {
                return n;
            }
     
        protected:
            N2* n;
    };
    Pense au tag :p

  5. #5
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par bolhrak
    Pas forc�ment. Tu peux tr�s bien avoir besoin du type exact de n dans tes classes m, et vouloir pourtant retourner un type N aux classes clientes. Donc une autre solutinoserait
    Tu peux aussi avoir besoin du type exact de n pour les clients qui connaissent directement M1, et non pas par l'interm�diaire de son interface M. Il est donc plus g�n�rique d'�crire :

    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
     
    class M {
        public:
            virtual N* getN() =0;
    };
     
    class M1 {
        public:
            virtual N1* getN() {
                return n;
            }
     
        protected:
            N1* n;
    };
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    37
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Par d�faut
    @JolyLoic
    C'est ce que j'avais fait au d�but, mais � la compilation j'avais une erreur comme quoi le type de retour de la fonction virtuelle de substitution diff�re, mais c'est vrai que cette solution m'aurai arranger, enfin surtout m'aurait �viter d'avoir � caster mes variables quand j'utilise des m�thodes de N1 non h�rit�es de N.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me avec le polymorphisme
    Par harf18 dans le forum D�buter avec Java
    R�ponses: 12
    Dernier message: 03/02/2014, 15h48
  2. VC++ Direct3D8, probl�me avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    R�ponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Probl�me avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    R�ponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Probl�me avec la m�moire virtuelle
    Par Anonymous dans le forum CORBA
    R�ponses: 13
    Dernier message: 16/04/2002, 16h10

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