Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1701 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  virtual dans une classe fille

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

virtual dans une classe fille

n°1831107
frenchtouc​co
Posté le 24-12-2008 à 10:03:31  profilanswer
 

bonjour,
 
soit le code suivant:

Code :
  1. class A
  2. {
  3. public:
  4.     virtual std::string get_type() = 0;
  5. };
  6. class B : public A
  7. {
  8. public:
  9.     virtual std::string get_type() { return "B"; }
  10. };


 
Quel est l'intérêt de déclarer la fonction de la classe B virtual ?
merci
 

mood
Publicité
Posté le 24-12-2008 à 10:03:31  profilanswer
 

n°1831262
Taz
bisounours-codeur
Posté le 24-12-2008 à 12:29:23  profilanswer
 

Sémantiquement, ça ne change pas le fait que get_type est virtuelle qu'il y ait virtual ou pas, puisque ça dépend de la définition de A::get_type. Mais la répétition permet de le clarifier, de montrer la redéfinition, etc.

n°1831556
frenchtouc​co
Posté le 26-12-2008 à 00:14:29  profilanswer
 

je vois thx

n°1832633
frenchtouc​co
Posté le 30-12-2008 à 17:37:05  profilanswer
 

en terme de taille de l'éxécutable le fait d'ajouter virtual dans B a un impact?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1832740
Joel F
Real men use unique_ptr
Posté le 31-12-2008 à 09:48:03  profilanswer
 

non.

n°1832813
frenchtouc​co
Posté le 31-12-2008 à 12:59:35  profilanswer
 

j'avais cru comprendre, à tort donc, ou mal, que le compilo rajouter dans l'objet un pointeur "VPTR" sur la vtable (avec initialistion dans le constructeur) dès lors qu'il y avait une fonction déclarée virtual dans la classe, ça ne s'applique que lorsque la classe n'est effectivement dérivée donc ?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1832931
Joel F
Real men use unique_ptr
Posté le 31-12-2008 à 17:07:32  profilanswer
 

non mais bon, un elemtent de vtable c'est 4 octets. Va falloir en empiler pas mal avant d'avoir un overhead notable surtout en tenant compte des optimisations au link.

n°1832948
frenchtouc​co
Posté le 31-12-2008 à 17:55:20  profilanswer
 

ok


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1839785
frenchtouc​co
Posté le 18-01-2009 à 22:08:11  profilanswer
 

Finalement en essayant ce bout de code, on s'apperçoit que ça ne change rien de rajouter ou non virtual dans une classe fille en terme de taille de l'éxécutable, puisque sauf erreur de ma part à partir du moment ou la fonction est virtual dans la base, la fonction fille hérité de se caractère virtual :

Code :
  1. class Virtual {
  2. public:
  3. virtual void foo() {
  4. }
  5. };
  6. class Base : private Virtual {
  7. public:
  8.  void foo() {
  9.   std::cout << "Base::foo()" << '\n';
  10.  }
  11. };
  12. class Derived : public Base {
  13. public:
  14. void foo() {
  15.  std::cout << "Derived::foo()" << '\n';
  16. }
  17. };
  18. int main()
  19. {
  20. Base* p2 = new Derived;
  21. p2->foo();  //Derived::foo()
  22. }


Message édité par frenchtoucco le 18-01-2009 à 22:09:12

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1839790
Joel F
Real men use unique_ptr
Posté le 18-01-2009 à 22:59:00  profilanswer
 

voila
 
"virtual un jour, virtual toujours"


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  virtual dans une classe fille

 

Sujets relatifs
virtual inlineinstanciation de classe impossible c++/cli
Diagramme de classeGénération de classe CS à partir d'un XSD
Déclaration de classe[java] classe abstraire, constructeur sans argument
Etendre une classe pour en faire un singletoninserer une classe dans du code php
Problème avec une classeAvis sur ma classe FTP
Plus de sujets relatifs à : virtual dans une classe fille


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR