(C++)Que signifie virtual ici

javast Messages postés 88 Statut Membre -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

struct A:public virtual B;

Que signifie le virtual avant B.

Merci

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Le virtual dans ce cas permet de faire de l'héritage virtuel. Cela évitera de dédoubler les membres de cette structure lors d'un futur héritage. On parlera d'héritage en diamant.
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Et ben, ça faisait longtemps que je n'avais pas appris quelque chose en C++ !
      Par contre, je n'ai pas compris ton explication fiddy. Pourrais tu nous donner un petit exemple STP ?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Par exemple si tu fais :
      struct B { int i;};
      struct A : public B;
      struct C : public B;
      Puis : struct Union : public A, public C;
      Cela ne devrait pas passer la compilation puisque cela dupliquera la variable i de la structure B. Dis autrement : Union.i; le compilateur ne sera pas s'il doit hériter de A ou de C.
      Tandis qu'en mettant : struct A : public virtual B; et struct C : public virtual B; cela ne créera pas le doublon. Et la compilation passera.
      J'espère avoir été plus clair (et surtout de pas avoir dit de bêtises ^^).
      0
    3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Ok, merci. Je comprend mieux avec ton message d'avant et le "diamant":
        B
       /  \
      A    C
       \  /
       Union
      0
    4. javast Messages postés 88 Statut Membre 1
       
      re,
      J'ai une deuxième question si ça dérange pas.
      Est ce que B ici, est considéré comme une classe ou bien une struct?et pourquoi?

      Merci
      0
    5. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      en c++, une struct est comme une classe. sauf que ses membres sont public par défaut, au lieu de private.


      le but est de garder une compatibilité avec un code type "C" (où les struct existent mais sont simplement des "enregistrements" de variables) avec l'orienté objet du C++.
      0
  2. javast Messages postés 88 Statut Membre 1
     
    Merci beaucoup à vous deux :)
    0