(C++)Que signifie virtual ici

Fermé
javast Messages postés 75 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 14 février 2013 - 7 févr. 2012 à 22:04
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 13 févr. 2012 à 02:06
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
8 févr. 2012 à 00:19
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 févr. 2012 à 08:54
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
8 févr. 2012 à 11:09
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 févr. 2012 à 14:22
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 mardi 20 avril 2010 Statut Membre Dernière intervention 14 février 2013 1
12 févr. 2012 à 22:07
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 13/02/2012 à 02:06
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 mardi 20 avril 2010 Statut Membre Dernière intervention 14 février 2013 1
8 févr. 2012 à 17:08
Merci beaucoup à vous deux :)
0