question sur l'héritage multiple - C++ - Programmation
Marsh Posté le 08-04-2008 à 07:45:14
dynamic_cast ... pas static_cast
Code :
|
achètes toi un bouquin, ce genre de question sont abordés dans le chapitre 1 de la plupart des bouquins sérieux sur le sujet
Marsh Posté le 08-04-2008 à 13:22:36
Joel F a écrit : dynamic_cast ... pas static_cast
achètes toi un bouquin, ce genre de question sont abordés dans le chapitre 1 de la plupart des bouquins sérieux sur le sujet |
salut,
merci beaucoup pour ta réponse ! ben j'ai deux bouquins mais ils en parlent pas vraiment ... et j'ai regardé sur cette page :
http://www.cplusplus.com/doc/tutorial/typecasting.html
ils disent que le static_cast peut etre utilisé pour caster une classe mère vers une classe dérivée (mais que le développeur doit savoir ce qu'il fait) c'est pour ca que je pensais utiliser ca ....
non ?
EDIT: ok après relecture j'ai la réponse à ma question ... merci
Marsh Posté le 08-04-2008 à 13:54:15
salut,
en fait j'ai une autre question : dans le cas où on fait un Animal * p = new Lion; , alors il faut faire une conversion avec dynamic_cast avant de faire un delete ?
Marsh Posté le 08-04-2008 à 13:54:51
static_cast c'est pour une conversion qui peut être faîte de manière sure à la compilation. Pas la peine de sauter sur static_cast trop vite, la plus part du temps, une conversion par construction suffit (voire est implicite).
Marsh Posté le 07-04-2008 à 23:12:55
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) :
Comment je fais pour me déplacer dans le tableau ? C'est le bordel, non ? Par exemple si je veux faire :
ca marche pas car "a" est un pointeur vers un animal et pas un lion. Est ce que je suis obliger de faire :
??
(*) 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