STD type et polymorphisme.

STD type et polymorphisme. - C++ - Programmation

Marsh Posté le 12-11-2008 à 15:12:37    

Re-bonjour,
 
un nouveau souci...
J'ai crée un set qui contient des poiinteur sur Client.
A present je le remplis à partir d'une classe template avec un pointeur
sur un objet de type descendant (heritier) de Client, mais jamais un client.
 
A present je souhaite utiliser les operateur<< redefinis dans chaque classe
(client et filles). Mais chaque appel à cet operateur sur l'objet pointé par le set,
c'est la methode de client qui est utilisée.
 
Comme on ne peut definir une methode friend virtuel et que meme ca ne servirait à rien
ici puisque le type de l'argument de droite de l'operateur passerait de client à descendant  
suivant les cas, je ne vois pas comment solutionner ce probleme.
 
Ne devrait-il pas y avoir unappel à l'operateur du descedant??

Reply

Marsh Posté le 12-11-2008 à 15:12:37   

Reply

Marsh Posté le 12-11-2008 à 15:36:30    

solution facile:
class Base { public: virtual void print(std::ostream& ) const; };
std::ostream& operator<<(std::ostream& os, const Base& b) { b.print(os); return os; }


Message édité par Taz le 12-11-2008 à 15:38:13
Reply

Marsh Posté le 12-11-2008 à 15:37:29    

Et ce qui se passe est normal, il n'y a pas de multiméthodes en C++, c'est donc par rapport au type statique des arguments de ce opérateur que la résolution se fait.

Reply

Marsh Posté le 12-11-2008 à 15:38:35    

fais toi un:
virtual ostream &stream_out( ostream & )  
et l'operator << qui utilise stream_out (et qui donc devrait utiliser celui de l'héritier)
 
edit: burned par taz


Message édité par bjone le 12-11-2008 à 15:39:07
Reply

Marsh Posté le 13-11-2008 à 02:16:37    

merci à tous, vos conseils m'ont bien aidé!

Reply

Sujets relatifs:

Leave a Replay

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