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 :

[héritage privé] appel du constructeur de base


Sujet :

C++

  1. #1
    Membre habitué Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Points : 155
    Points
    155
    Par défaut [héritage privé] appel du constructeur de base
    j'ai 2 classes, dont l'une est dérivée de l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class test {
      protected:
      test(){};
    }
     
    class test2 : private test {
      public:
      test2 : test() {}
    }
    la fonction creer crée normalement une instance de cette classe test2. Mais mon compilateur signale une erreur et indique que le constructeur de test est une base inacessible de test2.
    (creer renvoie un pointeur de test)
    je ne comprends pas trop l'erreur.
    si c'est creer qui appelle le constructeur de test, je ne vois pas trop l'intérêt de la dérivation privée, donc c'est cela doit être autre chose.
    Merci d'avance.
    " Tout homme est digne d'un parapluie." Stavroguine dans Les Démons de Dostoïevski.

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    L'héritage privé est avant tout un héritage d'implémentation => réutilisation d'un code, sans risque d'être confondu avec le type dont on hérite. C'est l'autre façon de réutiliser -- avec l'aggrégation. Choisir l'une ou l'autre est un détail d'implémentation;

    Le constructeur sans arguments de test étant protégé, tu devrais pouvoir y faire appel depuis tetst2.

    En revanche, test2 n'est pas un test (dans les fonctions non amies de test2). Tu ne peux donc pas renvoyer comme cela un test2 que tu viens de créer en le faisant passer pour un test.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre habitué Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par Luc Hermitte
    En revanche, test2 n'est pas un test (dans les fonctions non amies de test2). Tu ne peux donc pas renvoyer comme cela un test2 que tu viens de créer en le faisant passer pour un test.
    je perds donc le caractère polymorphique ?
    cela limite l'intérêt de la dérivation privée, non?

    j'ai fait des essais avec une dérivation publique et cela a l'air de marcher normalement
    (d'ailleurs aurait-ce dû marcher ?)
    " Tout homme est digne d'un parapluie." Stavroguine dans Les Démons de Dostoïevski.

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Cela ne limite pas son utilisation. Ce n'est pas la même.
    Schématiquement (car public peut englober la réutilisation):
    - privé -> on réutilise
    - public -> on se fait utiliser en place de

    Toi, tu veux que test2 soit utilisé en place de test => héritage public.

    L'héritage privé permet à partir d'une classe déjà implémentée d'en définir une complètement différente (contrat différent).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre habitué Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Points : 155
    Points
    155
    Par défaut
    Merci beaucoup, j'ai bien compris pourquoi cela ne marchait pas.
    d'ailleurs j'ai même intuité que allait me faire une erreur à la compilation
    et effectivement cela ne marche pas...
    " Tout homme est digne d'un parapluie." Stavroguine dans Les Démons de Dostoïevski.

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

Discussions similaires

  1. Héritage: comment appeler le constructeur parent ?
    Par scheme dans le forum Langage
    Réponses: 22
    Dernier message: 24/02/2011, 17h55
  2. Réponses: 11
    Dernier message: 30/07/2010, 22h56
  3. Héritage et appel des constructeurs parents
    Par Antoine_935 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/05/2009, 18h03
  4. [JUnit] Classe de test avec héritage et appel du constructeur
    Par LuckyLiam dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 23/04/2009, 09h36
  5. [POO-Héritage] Appel du constructeur en PHP4.3.2
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 15h37

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