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

Langage C++ Discussion :

Héritage et composition


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Par défaut Héritage et composition
    Bonjour,

    j'ai un petit soucis, je vais essayer d'imager mon problème:

    J'ai une classe mère A et A1 et A2 qui hérite de cette classe.

    J'ai ensuite une classe mère B qui possède un attribut qui a comme type la classe A.Les classes B1 et B2 hérite de la classe B.

    Mon soucis est que j'ai une méthode dans ma classe B1 et B2 dont l'attribut qui a comme type la classe A peut soit être de type A1 ou A2 suivant une certaine condition.

    Comment puis-je gérer ceci?


    Merci de vos réponses

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour,

    Citation Envoyé par arkerone Voir le message
    Mon soucis est que j'ai une méthode dans ma classe B1 et B2 dont l'attribut qui a comme type la classe A peut soit être de type A1 ou A2 suivant une certaine condition.
    Euh… Je n'ai pas compris cette phrase.
    Tu veux dire que dans les classes B1 et B2, il y a une fonction membre dont un paramètre est de type A, mais dont le type réel peut être A1 ou A2 (suivant une condition) ?

    Si c'est ça, je ne vois pas vraiment où est le problème.
    Il te suffit de déclarer ton paramètre comme une référence ou un pointeur sur A (éventuellement constant(e)), et son type réel sera le bon (A1 ou A2).
    http://cpp.developpez.com/faq/cpp/?p...ique_dynamique

    Si les classes B1 et B2 doivent effectuer des traitements différents selon que le paramètre est de type A1 ou A2 (ce qui, entre nous, me paraît étrange), tu peux créer deux fonctions membres avec la même signature, si ce n'est que là où l'une attend un paramètre de type A1, l'autre attend un paramètre de type A2.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Dans l'ordre:
    1. Déclare dans B l'attribut de type A (sans distinction) comme étant un pointeur ou une référence sur l'objet de type A
    2. Vérifie, le cas échéant, dans le constructeur de chaque classe dérivant de B si l'objet "passant pour être de type A" est du type dynamique adéquat par rapport à celui que la classe dérivée de B est sensée manipuler
    3. Déclare une fonction virtuelle (éventuellement pure, si tu ne peux fournir aucun comportement cohérent pour le type A) correspondant au comportement attendu de la part de tes B
    4. Définis correctement ce comportement pour toute classe dérivant de A
    5. invoque ce comportement au départ de l'attribut de ta classe B.

    Cela te donnerait un code proche de
    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
    class A
    {
        public:
            virtual void doSomething() = 0; // !!! transforme la classe A en classe
                                      // abstraite !!!
    };
    class A1 : public A
    {
        public:
            virtual void doSomething(); // comportement adapté pour le type A1
    };
    class A2 : public A
    {
        public:
            virtual void doSomething(); // comportement adapté pour le type A2
    };
    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
    class B
    {
        public:
            B(A & a) : a(a){}
            virtual  ~B(){}
            void execute()
            {
                a.doSomething();
            }
        private: 
            A & a;
    };
     
    class B1 : public B
    {
        public:
            B1(A1 & a):B(a){}
    };
     
    class B2 : public B
    {
        public:
            B2(A2 & a):B(a){}
    };
    NOTA: il est important de veiller à ce que l'objet de type A (ou A1 ou A2) continue à exister tant que l'objet de type B correspondant existe, que le membre a soit un pointeur ou une référence
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Par défaut
    Merci beaucoup j'ai pu résoudre mon soucis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/11/2011, 23h15
  2. Héritage (pattern Composite)
    Par Ploupi dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2011, 10h36
  3. MCD correspondant à UML avec héritage et composition
    Par thomine dans le forum Modélisation
    Réponses: 4
    Dernier message: 08/07/2011, 11h21
  4. Héritage de composition.
    Par 3DArchi dans le forum BOUML
    Réponses: 1
    Dernier message: 30/07/2008, 14h59
  5. Héritage VS Composition
    Par bolhrak dans le forum C++
    Réponses: 8
    Dernier message: 18/12/2006, 04h49

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