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 :

Heritage Privé comprehension


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Heritage Privé comprehension
    BOn alors voila mon probleme :

    Apres avoir lu des docs sur l'heritage de classe, j ai du mal a comprendre la specificité du l heritage privé :

    Jdonne un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Carré{
    public :
    void dessine();
    };
     
    Class SommetArbre : private Carre {
    public :
    void affiche () { Carre :: dessine() }  // vu QUE nous sommes private cette ligne est interdite ?
     
    };
    est ce que dans n importe quel endroit du code on peut convertir des sommets Arbre en Carre?
    Dans n'importe qu elle endroit du code on peut ecrire SommetArbre sa; sa.dessine()?
    Dans l'implementation de Sommetsarbre on peut convertir des SOmmets ARbres en Carre?
    A quel moment un heritage privé est il justifié ?

    Merci d avance

    Edit : desole pour les balises ...

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    ta classe
    Citation Envoyé par s3r3nity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class SommetArbre : private Carre
    SommetArbre herite de Carre donc Sommet Arbre possede la methode dessine().
    Dans la classe Carre cette methode est publique mais dans la classe SommetArbre cette methode est devenue privée.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Donc non accessible ..

    Quand on fait classe B : private A

    Tt ce qui est en A est private pour B.. Dc non accessible
    c ca .
    ?

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par s3r3nity
    Tt ce qui est en A est private pour B.. Dc non accessible
    exact, seul les autres methodes de A pouront acceder à ces methodes (ou membres).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Donc si j ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Class A {
    public : 
    void mange()
    }
     
    Class B : private A {
    public :
    void boit();
    void deguste(A::mange()); //fonctionne
     
    void devore( mange() ); //Fonctionne pas car private
    }

  7. #7
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut Re: Heritage Privé comprehension
    Citation Envoyé par s3r3nity
    BOn alors voila mon probleme :

    Apres avoir lu des docs sur l'heritage de classe, j ai du mal a comprendre la specificité du l heritage privé :

    Jdonne un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Carré{
    public :
    void dessine();
    };
     
    Class SommetArbre : private Carre {
    public :
    void affiche () { Carre :: dessine() }  // vu QUE nous sommes private cette ligne est interdite ?
     
    };
    Pas de problème : Quand on dérive en privé, on peut appeler toutes les fonctions publiques depuis l'implémentation de la classe.
    Citation Envoyé par s3r3nity
    est ce que dans n importe quel endroit du code on peut convertir des sommets Arbre en Carre?
    Non : L'héritage privé ne permet pas la conversion.

    Citation Envoyé par s3r3nity
    Dans n'importe qu elle endroit du code on peut ecrire SommetArbre sa; sa.dessine()?
    Non : Les fonctions de Carré sont comme si elles étaient déclarées privées dans SommetArbre

    Citation Envoyé par s3r3nity
    Dans l'implementation de Sommetsarbre on peut convertir des SOmmets ARbres en Carre?
    Non.

    Citation Envoyé par s3r3nity
    A quel moment un heritage privé est il justifié ?
    Rarement.
    L'héritage privé est une alternative à l'aggragation, et non pas à l'héritage. Elle peut avoir une intérêt sur l'aggrégation dans deux cas :
    - Si avant d'aggréger, on a besoin de redéfinir quelques fonctions virtuelles. L'alternative étant de faire de l'héritage public pour redéfinir ces fonctions, puis d'aggréger la classe obtenue. En faisant ainsi, on évite l'intermédiaire (bof).
    - Pour optimiser la consommation mémoire d'une classe quand la classe de base est vide (voir empty base classe optimisation pour plus d'info).
    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.

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par s3r3nity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Class A { 
    public : 
    void mange() 
    } 
     
    Class B : private A { 
    public : 
    void boit(); 
    void deguste(A::mange()); //fonctionne 
     
    void devore( mange() ); //Fonctionne pas car private 
    }
    non, c'est plutot :

    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Carre{
         public:
                  void mange();
    };
     
    class SommetArbre : private Carre{
        public:
                 void deguste();
    };
    revient à ecrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class SommetArbre{
        public:
                 void deguste();
        private:
                void mange();
    };
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    ouai ...

    Donc si on declare Class B : private Class A

    on pourra juste acceder a A via une fonction public de B ...
    Jcapte pas trop l interet et jtrouve aucun document sur le net ou dans mes bouquins qui est clair sur cette notion de heritage privé ...

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    comme l'a dit JolyLoic, l'heritage privée est rarement utilisé.

    Citation Envoyé par s3r3nity
    Jcapte pas trop l interet
    normal yen a pas beaucoup
    imaginons :
    tu cree une classe A qui possede des membres publiques.
    et puis un jour (quand, je sais pas ) tu a besoin d'une classe B qui necessite les memes membres que A a la difference que dans ta classe B ces membres doivent etres prives (pourquoi, on s'en fout).
    Dans ce cas il te suffit d'utiliser l'heritage privée.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Retiens juste que héritage privé = aggrégation. Pour les détails, voir ce que Loïc a dit par exemple.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    ok
    merci a tous pour ces informations et desole de vous avoir ennuyé avec ca mais je trouver rien de complet et clair sur le net et dans mes bouquins.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    JolyLoic est tu sur que dans l implementation de la classe SommetArbre on ne peut pas convertir des SOmmetsArbres en Carre?

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par s3r3nity
    JolyLoic est tu sur que dans l implementation de la classe SommetArbre on ne peut pas convertir des SOmmetsArbres en Carre?
    Oui, seul l'héritage publique le permet. Pourquoi ? Car l'héritage publique modélise une relation "est un" alors que l'héritage privé modélise une relation "s'implémente en terme de".

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    mhh ok

    jte redemande car j avais cet exemple dans un exam et la correction stipule que
    Dans l'implementation de la classe SOmmetArbre, on peut Convertir des SommetsArbres en Carre.

    Il s ont du se tromper ... merci

  16. #16
    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
    Citation Envoyé par s3r3nity
    merci a tous pour ces informations et desole de vous avoir ennuyé avec ca mais je trouver rien de complet et clair sur le net et dans mes bouquins.
    Herb Sutter doit en parler sur GOTW (/dans Exceptional C++), et je crois que c'est également traité sur objectmentor. Voir aussi la FAQ C++ lite.
    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...

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci Luc pour le renseignement

    En ce qui concerne la faq il va de soit que j y suis passez avant mais l 'explication n'etait pas tres clair ..
    Par contre les exemples données mon beaucoup aidé.

    Encore Merci

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

Discussions similaires

  1. Heritage et membre privé
    Par b Oo dans le forum C++
    Réponses: 5
    Dernier message: 27/11/2006, 22h20
  2. [Postgres] Pb d'heritage...
    Par anonia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 22h34
  3. [PostgreSQL] Question vis a vis de l'heritage...
    Par Gandalf dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2003, 16h53
  4. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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