héritage ou déclaration d'objet ?

héritage ou déclaration d'objet ? - C++ - Programmation

Marsh Posté le 27-01-2004 à 12:46:47    

Bonjour, je voulais connaitre les avantages/inconvénients entre ces 2 écritures :
 

Code :
  1. struct class_base
  2. {
  3.   void methode_base()
  4.   {
  5.     // ...
  6.   }
  7. };
  8. class my_class : class_base
  9. {
  10.   void methode()
  11.   {
  12.     methode_base();
  13.   }
  14.   // ...
  15. };


 
et  
 

Code :
  1. struct class_base
  2. {
  3.   void methode_base()
  4.   {
  5.     // ...
  6.   }
  7. };
  8. class my_class
  9. {
  10.   class_base base;
  11.   void methode()
  12.   {
  13.     base.methode_base();
  14.   }
  15.   // ...
  16. };


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 27-01-2004 à 12:46:47   

Reply

Marsh Posté le 27-01-2004 à 12:52:20    

ça dépend. la première, c'est à dire l'héritage « est implémenté en terme de » est assez sympa? l'autre le, pattern de l'adaptateur (je vais pas dire le mal de que je pense des patterns, mais bon, des gens l'appel comme ça)
 
à toi de voir ce qui te convient le mieux. la premireè solution est pas mal, notemment quand on veut restreindre une interface (usage massif de directive using)

Reply

Marsh Posté le 27-01-2004 à 13:18:27    

sinon, une seconde petite question :
est-ce que l'écriture suivante est correcte ?
(elle compile et execute, mais bon ...)
 

Code :
  1. #include <iostream>
  2. class mere
  3. {
  4. protected:
  5.   void membre()
  6.   {
  7.     std::cout "mere : membre\n";
  8.   }
  9. };
  10. struct fille
  11. {
  12.   void membre()
  13.   {
  14.     // je veux appeler membre chez la mere
  15.     mere::membre();
  16.   }
  17. };
  18. int main()
  19. {
  20.   fille f;
  21.   f.membre();
  22. }


 
et avec cette ecriture, encore une question :
je voudrais savoir si le comportement (l'absence d'ambiguité) ci-dessous est standard.
 

Code :
  1. #include <iostream>
  2. struct mere
  3. {
  4.   void membre()
  5.   {
  6.     std::cout "mere : membre\n";
  7.   }
  8. };
  9. struct fille
  10. {
  11.   void membre()
  12.   {
  13.     std::cout "fille : membre\n";
  14.     // je veux appeler membre chez la mere
  15.     mere::membre();
  16.   }
  17. };
  18. int main()
  19. {
  20.   fille f;
  21.   // ici le compilateur compile sans faire d'ambiguité, et il appelle fille::membre
  22.   f.membre();
  23.   // pour appeller mere, je dois ecrire
  24.   f.mere::membre();
  25. }



---------------
-( BlackGoddess )-
Reply

Marsh Posté le 27-01-2004 à 13:21:46    

tout ça est possible. enfin bon, la virtualité est la pour aider. les directives using aussi. sinon la syntaxe est correcte, on peut tout à fait appeler un membre d'une classe de base

Reply

Marsh Posté le 27-01-2004 à 13:23:09    

bien, merci :jap:


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed