En dehors de ma classe Toupie j'ai codé l'opérateur<< pour afficher une toupie, puis en dehors de ma classe ConeSimple j'aimerais également coder l'opérateur << qui utiliserais d'abord l'opérateur << relatif à la classe Toupie et qui rajouterais des informations en plus, cependant je n'arrive pas à trouver la syntaxe exacte pour faire un démasquage de l'opérateur << (si c'est possible de le faire).
Merci d'avance
Tu peux utiliser un static_cast pour convertir ton ConeSimple,
std::cout << std::static_cast<Toupie>(mon_conesimple);
JAMAIS de cast dans mon cours !
Les cast sont un aveu de faiblesse, un manque d'effort de conception propre. ;-) Et sont souvent source de plein de problèmes (incompatibilité / perte de propriétés).
Le bon « pattern » dans ce cas est effectivement celui de la méthode interne, sur laquelle nous reviendrons justement dans le cours de cette semaine.
Ce « pattern » a déjà été évoqué lors de l'étude de cas de la surcharge des opérateurs : lorsque l'on veut avoir en externe quelque chose que l'on ne peut avoir qu'en interne, une bonne chose à faire est de faire une méthode (interne) et de l'appeler dans une fonction (externe).
Ici vous voulez (ce n'est pas votre problème/votre question ; mais c'est le point de départ) du polymorphisme dans une fonction (operator<<). Or le polymorphisme est, par nature même, quelque chose « d'interne » (= lié aux classes). Il faut donc que votre fonction appelle une méthode polymorphique.
Cette solution vous permet alors de résoudre votre problème : il est simple de démasquer des méthodes de super-classes dans les sous-classes.
Bonjour,
Je profite de cette conversation car je me suis retrouvée exactement dans la même situation.
Mon problème est que le polymorphisme ne fonctionne pas car, dans ma fonction operator<<, la toupie ne peut pas être prise par référence (du moins ça ne compile pas) de cette manière :
ostream& operator<<(ostream& sortie, Toupie const& toupie);
Je suis alors obligé de faire un passage par valeur, et donc même si j'utilise par exemple une fonction interne affiche(), elle fera toujours appel à la méthode général de Toupie et non pas à ses spécialisations dans les sous-classes.
Comment puis-je faire ?
Merci