Partage
  • Partager sur Facebook
  • Partager sur Twitter

Héritage

Sujet résolu
Anonyme
    10 octobre 2007 à 20:16:47

    Bonjour,

    Je viens de lire le chapitre du cours de Matéo sur l'héritage et je voudrais des précisions sur un point :

    1. class Guerrier : public Personnage
    2. {
    3. };


    Que signifie le public ici (en rapport avec les portées ?) et quel est son rôle ?

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      10 octobre 2007 à 20:21:49

      Manque de recherche! Ce sujet à été soulevé plus d'une fois!
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        10 octobre 2007 à 20:36:49

        Ben... j'ai pourtant cherché, et recherché après avoir lu ton message pour être sûr. Mais non, je ne vois pas de sujet qui traite ma question.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 octobre 2007 à 20:40:11

          j'avais déjà lu un peu des trucs la dessus avant (tout un bouquin) donc j'ai pas trop fait gaffe a ce que disais Mateo, mais je suis sur qu'en lisant sont cours, tu dois pouvoir trouver facilement!

          Comme dit MatteX, cherche un petit peu, et si ca suffit, encore un peu plus
          • Partager sur Facebook
          • Partager sur Twitter
            10 octobre 2007 à 20:44:55

            La réponse est dans le tuto...
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              10 octobre 2007 à 23:57:22

              J'ai relu le tutoriel, et je ne vois franchement pas où ce point est abordé. Je suppose que ça concerne les portées et le tuto évoque en effet la portée protected, mais je ne vois rien concernant l'usage de public lors de la définition de la classe fille.

              J'ai trouvé ce message en faisant des recherches sur le forum :

              Citation : lmghs

              Par ordre de priorité d'application (i.e. RS1 est prioritaire sur RS2)

              Règle syntaxique 1- Ce qui est privé devient innaccessible quelque soit le type d'héritage.

              Règle syntaxique 2- L'héritage public est neutre (i.e. pas de modif sur les accessibilités public et protégé)

              Règle syntaxique 3- L'héritage protégé dégrade d'un cran (pub->pro, pro->pri)

              Règle syntaxique 4- L'héritage privé passe tout (pub, pro) en privé


              Règles sémantiques:
              - l'héritage privé est un héritage de réutilisation de code uniquement
              - l'héritage public est un héritage qui permet la substituabilité ("se faire utiliser en place de") ; de bonnes règles de conception tendent à refuser une utilisation non compatible avec cet "est-un" de l'héritage public. NB: il permet aussi la réutilisation.


              Est-ce que c'est à ça que ça sert ?


              Par exemple :

              1. class Guerrier : protected Personnage
              2. {
              3. };

              Ce code change la portée des éléments public de la class Personnage en protected et les éléments protected en private ?
              • Partager sur Facebook
              • Partager sur Twitter
                11 octobre 2007 à 0:07:46

                Oui, mais ça ce n'est que l'aspect syntaxique. Limite le moins important de tous (bienvenu au pays magique du C++) (et malheureusement le seul que l'on trouve dans la majorité des ressources qui abordent la question)

                Ce qui est vraiment super important, c'est l'aspect sémantique : i.e. qu'est-ce que tu cherches à faire vraiment ?
                - Pouvoir utiliser un objet de type guerrier dans une fonction qui attend officiellement un pesonnage ? -> héritage public (mot clé pour ton moteur de rechercher: "LSP" comme dans "Liskov Substitution Principle" (/Principe de substitution de Liskov)

                - Juste réutiliser du code (sans permettre la substitution du point 1) ? -> héritage privé

                Le tuto n'aborde effectivement pas cela. Je crois que j'en avais très succintement parlé dans les commentaires.
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                Anonyme
                  11 octobre 2007 à 13:32:19

                  Ok. Merci lmghs.


                  PS : Et je viens de comprendre pourquoi je ne trouvais rien sur le sujet en cherchant sur le forum : le module de recherche du SdZ différencie les caractères avec accent (é) et sans accent (e). Il y a en effet des sujets qui en parlent si on cherche "héritage" et non "heritage". Mea culpa, donc. :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Héritage

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown