Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
896 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  question sur l'héritage multiple

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question sur l'héritage multiple

n°1714059
in_your_ph​ion
Posté le 07-04-2008 à 23:12:55  profilanswer
 

Bonjour,
 
j'aimerai savoir comment contourner un problème, lorsqu'on a un héritage multiple en losange comme ca :
 
http://www.commentcamarche.net/poo/images/animaux2.gif
 
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  :pt1cable:  
 
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 :
  1. 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 :
  1. 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 :
  1. Lion * b =  new Lion[4];
  2. b[4].une_super_methode_de_lion();
  3. //ou bien ..
  4. Lion * c = static_cast<Lion*>(a);
  5. c[4].une_super_methode_de_lion();
  6. //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  :love:  :love:  
 
 
 

mood
Publicité
Posté le 07-04-2008 à 23:12:55  profilanswer
 

n°1714099
Joel F
Real men use unique_ptr
Posté le 08-04-2008 à 07:45:14  profilanswer
 

dynamic_cast ... pas static_cast

 
Code :
  1. Lion * plion;
  2. if( plion = dynamic_cast<Lion*>(a[4]) )
  3.   plion->methode_de_lion();
  4. else
  5.   // Ce pointeur n'est pas un Lion
 

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

Message cité 1 fois
Message édité par Joel F le 08-04-2008 à 07:46:12
n°1714311
in_your_ph​ion
Posté le 08-04-2008 à 13:22:36  profilanswer
 

Joel F a écrit :

dynamic_cast ... pas static_cast

 
Code :
  1. Lion * plion;
  2. if( plion = dynamic_cast<Lion*>(a[4]) )
  3.   plion->methode_de_lion();
  4. else
  5.   // Ce pointeur n'est pas un Lion
 

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 ?  :sweat:

 

EDIT: ok après relecture j'ai la réponse à ma question ... merci


Message édité par in_your_phion le 08-04-2008 à 13:47:49
n°1714336
in_your_ph​ion
Posté le 08-04-2008 à 13:54:15  profilanswer
 

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 ?

n°1714337
Taz
bisounours-codeur
Posté le 08-04-2008 à 13:54:51  profilanswer
 

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).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  question sur l'héritage multiple

 

Sujets relatifs
héritage multiple .. pour ou contre ?[dumb girl asking] fermer des onglets et détruire des choses
[Javascript] héritage entre classe dans des fichiers différentsquestion héritage CSS
question sur le javascript "discret"[HTML/PHP] question "normes de codage"
[C++/Winsock] Petite question sur le connect()question sur la conception d'un formulaire
Plus de sujets relatifs à : question sur l'héritage multiple


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR