Heritage et derivation de type

Heritage et derivation de type - C++ - Programmation

Marsh Posté le 15-11-2008 à 02:22:38    

Bonjour,
 
J'ai de petits soucis a comprendre comment fonctionne la dérivation de type.
Je m'explique :
Je dispose de 4 classes :
-Une classe chambre
-Une classe objet
-2 classes filles de objet, appellons les meubles et livres
 
Chambre a comme attribut un tableau de pointeur de type objet.
Je veux pouvoir ajouter dans ce tableau des objets de la classe meuble ou livre.
Pour cela je créer une méthode ajouter_objet dans la classe chambre et je fais selon la cas soit :

Code :
  1. meubles *tmp = new meubles();
  2.     t_inventaire[x]=tmp; //t_inventaire etant mon tableau de pointeur


 
soit :
 

Code :
  1. livres *tmp = new livres();
  2.     t_inventaire[x]=tmp;


 
Cela fonctionne bien cependant lorsque je fais cela je n'ai plus acces aux methodes et arguments qui ne sont pas issus de la classe mere a partir de ce tableau (me suis je bien fait comprendre?   :sweat: ).
 
Ma question est donc la suivante : Comment puis je faire pour avoir un tableau de pointeur permettant de pointer vers des objets de chacunes de ces 2 classes tout en pouvant utiliser a partir de celui-ci les méthodes et arguments propre a chacune de ces 2 classes filles?
 
En espérant avoir été clair, je vous remercie d'avance pour vos réponses.
 
 

Reply

Marsh Posté le 15-11-2008 à 02:22:38   

Reply

Marsh Posté le 15-11-2008 à 10:47:58    

Deux réponses :
 
Version puriste : Tu n'as pas à le faire. Si tu cherches à faire ça, c'ets que ta modélisation est bancale car elle viole le principe de substitution de Lyskov
 
Version ad-hoc moche : Utilise dynamic_cast.

Code :
  1. Objet* po = mesObjet[i];
  2. if(Meuble* pm = dynamic_cast<Meuble*>(po) ) // renvoie NULL si po n'est pas un meuble
  3. // faire un truc sur les meubles
  4. else if( Livre* pl = dynamic_cast<Livre*>(po) ) // idem avec liuvre
  5. // idem
  6. else
  7. // erreur grave


 
Mais bon, meuble et livre n'ont aucune raison d'hériter de la même classe mére.

Reply

Marsh Posté le 15-11-2008 à 13:55:01    

Oui mon exemple était un peu bancale. Mais en gros je me demandais comment faire pour afficher les attributs d'une classe fille a partir d'un pointeur du même type que dans mon précédent message.
Mais je viens de trouver comment faire avec le polymorphisme.
 
Merci en tout cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed