Bonjour !
Je me noie un peu dans l'heritage, pouvez vous m'aider ?
J'explique mon probleme :
J'ai une classe A
Puis une classe B qui hérite de A
Puis une classe C qui herite de A
et enfin une classe D qui herite de B et C
Si j'ai bien tout suivi, il faut que je declare B et C en heritage virtuel sinon j'aurais deux A dans mes objets D, c'est ça ?
Donc j'ai fait
Ca marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class B : virtual public A { ... } class C : virtual public A { ... }
Maintenant je manipule des B*, des C* et des D* en tant que A* (je manipule une liste contenant des A*)
J'ai compris qu'il fallait des fonctions virtuelles pour mes affichages par exemple, tout ça ça marche bien.
Là où ça marche pas, c'est quand je veux utiliser une methode de B ou de C. J'ai par exemple une methode publique fb() dans ma classe B
et mon pointeur A* pa
si j'appelle pa->fb() le compilo me dit que la fonction n'est pas déclarée
alors j'essaye un
((B*)pa)->fb()
et il me dit : cannot convert from base `A' to derived type `B' via virtual base `A'
donc il peut pas car c'est un heritage virtuel ?
Alors comment je fais ?
Merci d'avance pour vos réponses.
Partager