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 :

C++ : Heritage multiple mais de même base.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut C++ : Heritage multiple mais de même base.
    Bonjour, j'ai une petite question,
    voilà, j'ai une classe de base, que j'appelle cbasetruc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class cbasetruc{
    public :
    long a;
    };
    Maintenant j'ai deux specialisations de la classe. ctruc1 et ctruc2 (fils de cbasetruc).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ctruc1 : public cbasetruc
    {
    public :
    long b;
    };
     
    class ctruc2 : public cbasetruc
    {
    };
    Je crée des objets de type ctruc1 et 2 sans probleme, mais maintenant j'ai besoin de créer une classe ayant les deux specificités, je suis tenté de créer une classe ctruc2 qui herite à la fois de ctruc1 et de ctruc2... (qui heritent dejà de la même classe de base)

    est-ce que je peux faire celà ?
    y a t'il des precautions a prendre ?

    est-ce que tous les compilateurs le prennent en compte ?
    D'avance merci...

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Par défaut
    Oui tu peux (l'héritage en diamant est autorisé en C++).

    Il faut bien penser à déclarer tes héritages virtuels pour ctruc1 et ctruc2 pour éviter la redondance des attributs de la classe cbasetruc.

    Il faut aussi vérifier qu'il n'y aura pas de conflits entre les attributs et fonctions de ctruc1 et ctruc2 (vérifie bien les noms de tes membres).

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Super.. merci.
    Citation Envoyé par Lawyer666
    Il faut aussi vérifier qu'il n'y aura pas de conflits entre les attributs et fonctions de ctruc1 et ctruc2 (vérifie bien les noms de tes membres).
    ha ouais, t'as raison ca parait evident, mais il faut faire gaffe.
    bien que ctruc1 et 2 ont toute les deux une methode draw, je vais faire aussi une methode draw pour ctruc3 donc ca devrait aller. pour les données membre, c'est bon, tous les noms sont differents.

    Citation Envoyé par Lawyer666
    Il faut bien penser à déclarer tes héritages virtuels pour ctruc1 et ctruc2 pour éviter la redondance des attributs de la classe cbasetruc.
    Qu'est-ce que tu veux dire par là ? (je dois le mettre ou le mot "virtual" ?). je rappelle que j'instentie aussi des ctruc1 et ctruc2 hein. (j'en profite pour preciser que ca fait des années que je n'avais pas fait de C++ )

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par hpfx
    Qu'est-ce que tu veux dire par là ? (je dois le mettre ou le mot "virtual" ?).
    Là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class ctruc1 : virtual public cbasetruc
    {
    };
     
    class ctruc2 : virtual public cbasetruc
    {
    };
    MAT.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Citation Envoyé par Mat007
    Salut,


    Là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class ctruc1 : virtual public cbasetruc
    {
    };
     
    class ctruc2 : virtual public cbasetruc
    {
    };
    MAT.
    ha... je ne connaissait pas cette syntaxe là.
    mais qu'est-ce que ca va changer pour les classe ctruc1 et 2 ? je peux continuer à les utiliser comme avant ? promis ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par hpfx
    mais qu'est-ce que ca va changer pour les classe ctruc1 et 2 ? je peux continuer à les utiliser comme avant ? promis ?
    Il y a quelques subtilités, notamment sur l'ordre de construction/destruction, voir par exemple sur C++ FAQ Lite (j'ai un peu cherché dans la FAQ d'ici mais j'ai trop rien trouvé).

    Cela dit les cas d'utilisation sont tout de même assez rares, surtout quand on a la maîtrise des classes (qu'on les écrit ou qu'on peut les modifier), tu es sûr que tu ne peux pas faire autrement ?
    (je compte sur les doigts d'une main les fois où j'ai eu recours à ça, et c'était toujours avec des classes virtuelles pures dans le haut du diamand)

    MAT.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/02/2015, 09h32
  2. Services multiple pour une même base
    Par tibal dans le forum Administration
    Réponses: 5
    Dernier message: 17/04/2009, 08h27
  3. [Debutant]Insertion nulle mais '' dans la base
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 18/04/2005, 09h58
  4. Heritage accès aux membres de bases
    Par MAGNUM_HEAD dans le forum C++
    Réponses: 1
    Dernier message: 16/11/2004, 16h41
  5. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30

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