(C++)Que signifie virtual ici

Bonjour,

struct A:public virtual B;

Que signifie le virtual avant B.

Merci

2 réponses

  1. Contributeur
    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. Contributeur
      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. Contributeur
      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. Contributeur
      Ok, merci. Je comprend mieux avec ton message d'avant et le "diamant":
        B
       /  \
      A    C
       \  /
       Union
      0
    4. 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. 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. Merci beaucoup à vous deux :)
    0