Bonjour,
j'aimerai savoir comment contourner un problème, lorsqu'on a un héritage multiple en losange comme ca :
si j'ai bien compris, les classes Herbivore et Carnivore devrait hériter virtuellement de la classe animal, pour éviter que la classe Omnivore contiennent les données de la classe Animal en double
Or, si je fais cela, j'ai deux problémes que j'arrive pas à résoudre.
(*) Le premier, par exemple si Lion est une classe qui hérite de Carnivore (une classe abstraite) :
Code :
- Animal * a = new Lion[4];
|
Comment je fais pour me déplacer dans le tableau ? C'est le bordel, non ? Par exemple si je veux faire :
Code :
- a[4].une_super_methode_de_lion();
|
ca marche pas car "a" est un pointeur vers un animal et pas un lion. Est ce que je suis obliger de faire :
Code :
- Lion * b = new Lion[4];
- b[4].une_super_methode_de_lion();
- //ou bien ..
- Lion * c = static_cast<Lion*>(a);
- c[4].une_super_methode_de_lion();
- //et puis :
|
??
(*) Et le deuxième problème, qui découle du problème 1. Si je considère la classe humain qui est dérivée de Omnivore. Je peux pas faire de static_cast, car j'ai alors le problème suivant à la compilation :
cannot convert an 'identifier1*' to an 'identifier2*'; conversion from a virtual base class is implied
http://msdn2.microsoft.com/en-us/l [...] S.71).aspx
car les classes Herbivore et Carnivore héritent virtuellement de la classe animal,
Comment faire ?
merci beaucoup par avance