Partage
  • Partager sur Facebook
  • Partager sur Twitter

Classes mères

    21 août 2007 à 23:24:32

    Bonsoir,

    j'aimerais savoir si l'utilisation d'une classe mère A (avec ses classes dérivées B et C) pour pouvoir écrire :
    A* a=new B;
    et UNIQUEMENT pour ça (Il n'y a rien dans A) est propre... Ou un peu tirée par les cheveux!

    Dans mon cas, l'idée c'est de definir une classe de base Ligne, juste pour pouvoir regrouper LigneDroite et LigneCourbe, et par exemple attendre une Ligne* en paramètre d'une fonction.

    Si vous avez des suggestions, merci!
    • Partager sur Facebook
    • Partager sur Twitter
      21 août 2007 à 23:27:56

      oui tu peux le faire, par contre, sans cast, tu ne pourras utiliser que les méthodes/fonctions déclarés dans la classe A (Ligne dans ton cas).
      • Partager sur Facebook
      • Partager sur Twitter
        21 août 2007 à 23:31:17

        Pour l'instant, cela tient la route -- tant que tu ne t'amuses pas à downcaster.
        • 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
          21 août 2007 à 23:44:11

          Salut,

          si tu definis Ligne comme une classe avec des membres abstraits (virtuel pure, je crois en C++), et tu redefinis ces methodes dans les classes specialisées LigneDroite et LigneCourbe (Par exemple DrawLine(), GetLength(), etc ...), c'est pratique, ca te permet de traiter des lignes sans te soucier de leurs formes mais juste en sachant que c'est une ligne.

          bref, a voir selon ce que tu veux faire.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            22 août 2007 à 10:02:01

            Citation : SirJulio

            Salut,

            si tu definis Ligne comme une classe avec des membres abstraits (virtuel pure, je crois en C++), et tu redefinis ces methodes dans les classes specialisées LigneDroite et LigneCourbe (Par exemple DrawLine(), GetLength(), etc ...), c'est pratique, ca te permet de traiter des lignes sans te soucier de leurs formes mais juste en sachant que c'est une ligne.

            bref, a voir selon ce que tu veux faire.


            Cela s'appele le polymorphisme.
            • Partager sur Facebook
            • Partager sur Twitter
              22 août 2007 à 10:39:35

              Citation : SirJulio

              Salut,

              si tu definis Ligne comme une classe avec des membres abstraits (virtuel pure, je crois en C++), et tu redefinis ces methodes dans les classes specialisées LigneDroite et LigneCourbe (Par exemple DrawLine(), GetLength(), etc ...), c'est pratique, ca te permet de traiter des lignes sans te soucier de leurs formes mais juste en sachant que c'est une ligne.

              bref, a voir selon ce que tu veux faire.



              Exacte, mais les fonctions membres n'ont pas besoin d'être virtuelles pures. Elles peuvent très bien être définies dans la classe mère.
              • Partager sur Facebook
              • Partager sur Twitter
              Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              Anonyme
                22 août 2007 à 14:41:56

                Salut,

                @Nanoc : Tout a fait. Je traitais ici Ligne comme une interface, mais on peut tres bien comme tu le precises, avoir des membres juste virtuels definissant des comportements communs.
                • Partager sur Facebook
                • Partager sur Twitter
                  22 août 2007 à 16:04:28

                  Si Ligne ne sera jamais instancié, aussi bien faire au moins 1 fonction virtuelle pure (Dessiner() par exemple) que les classes instanciable doivent de toute façon redéfinir. Ça peut faire ressortir les erreurs de mauvaise conception parfois qu'on a inconsciemment déclaré une variable de type Ligne statique...

                  BCédric tu dis que A (Ligne) est vide mais Ligne devrait contenir toute les fonctions publique des enfants déclarées avec le mot clé virtual. Sinon le downcasting sera nécessaire pour utiliser les méthodes des enfants et la ça devient dangereux.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Classes mères

                  × 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