(C++)Que signifie virtual ici

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

struct A:public virtual B;

Que signifie le virtual avant B.

Merci
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Ok, merci. Je comprend mieux avec ton message d'avant et le "diamant":
  B
 /  \
A    C
 \  /
 Union
0
javast Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   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
Pacorabanix Messages postés 3248 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
javast Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup à vous deux :)
0