Polymorphisme, new et reference
Bonjour,
récemment, j'ai fait quelque chose qui marche, mais qui, à mon avis, est assez moche. :oops:
J'ai une classe CMyStream qui dérive de std::ostream et qui redéfinit quelques petites choses...
Or dans mon code, quand je veux utiliser mon stream, je ne peux pas faire ça :
Code:
1 2
| CMyStream monStreamTest(parametres_Constructeur);
monStreamTest << "Salut tout le monde" << std::endl; |
En effet, l’opérateur "<<" n'est pas redéfini dans ma classe (ben oui je vais pas m’embêter) et je ne peux pas profiter de celui de ostream par polymorphisme (argh c'est pourtant ça que je voudrais, je suis feignant moi) car monStreamTest n'est ni un pointeur ni une référence.
A l'inverse, ceci marche très bien :
Code:
1 2 3 4
| ostream* monStreamTest=new CMyStream(parametres_Constructeur);
(*monStreamTest) << "Salut tout le monde" << std::endl;
// ...
delete(monStreamTest); // oui oui le destructeur est virtuel toussa toussa ;) |
Mais franchement je ne trouve pas ça super mignon (le déréférencement) et pas naturel a taper. Un simple "monStreamTest" serait tellement plus esthétique.
Alors j'ai trouvé ça :
Code:
1 2 3
| ostream& monStreamTest=*(new CMyStream(parametres_Constructeur));
monStreamTest << "Salut tout le monde" << std::endl;
// ... |
Ça marche, c'est plus joli à utiliser... Mais franchement j'ai un peu peur de me faire taper dessus... Je ne pense pas que les références aient été prévues pour ça, et je suppose que je dois deleter mon allocation en mémoire dynamique mais j'ai peur que le programme m'en veuille de venir souiller sa référence comme ça... Et je ne saurais même pas la syntaxe correcte..
Bref je soupçonne le gros truc dégueulasse.
En gros, j'aimerais votre avis, et si ça vous irrite les yeux, dites moi ce que je peux faire :mrgreen: (une solution de débutant tellement plus évidente, élégante et sure..)
Merci pour votre aide et dsl pour le choc ! :mouarf: