Nouveau cout [Résolu]

Signaler
Messages postés
8
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
3 mars 2009
-
Messages postés
8
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
3 mars 2009
-
Bonjour,

Je souhaite creer un nouveau cout, disons cout1, qui aurait exactement les memes fonctionnalites que cout.

Dans le future, j aimerai l etendre de sorte que cout1<< ferait exactement la meme chose que cout<< mais cout1("fichier")<< ecrirait dans fichier.

C est une chose qui parait tres simple mais je n y parviens pas. J ai essaye des choses comme (en variable globale) :

ostream& cout1
template<class T>
ostream& operator<<(ostream& cout1, T&  stg)

Je n ai vu aucune discussion dans le forum. En fait j ai vu des discussions autour de la surcharge de << bien plus compliquees que je comprends. Mais je bute sur une chose aussi simple. C est hautement frustrant.

Merci d avance

10 réponses

Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
et bien desoler iostream a pas de constructeur alors juste pour corrigé ton code voila

:

#include


#include

<string>
using

namespace std;
class

CClasse{

public:CClasse();

~CClasse(){};

CClasse&

operator << (string);};

CClasse::CClasse()

{

}

CClasse& CClasse::

operator << (string sChaine){

cout << sChaine;

return *
this;}

main()

{

CClasse a;

a << "salut";

}

je vais trouver une innitiative a cela et je t'en donne des nouvelles
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
En fait tu peux faire ca avec iostream en déclarant un objet de classe ofstream, tu as les fonctions open/close du fichier et je suppose que tu peux t'en servir comme cout (je me suis jamais servi de ca à vrai dire, mais je pense que c'est bon).
Ca devrait donner un truc du genre :
ofstream oFile;
oFile.open("C\essai.txt");
oFile<<"Et voila";
oFile.close;

Un lien utile peut-être :
http://www.cplusplus.com/reference/iostream/ofstream/
Messages postés
8
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
3 mars 2009

     juju12,

    Merci pour ta reponse rapide. Dans ce cas, je vais poster ma question a l envers. Supposons que je cree l objet oFile tel que tu le proposes mais que je veuille de temps en temps que la sortie bascule de essai.txt vers la sortie standard, par ex:

oFile<<"Et voila" dans essai.txt
mais
oFile("std")<<"Et voila" sur la sortie standard (comme ci j avais appele cout).
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
oFile<<"Et voila"; // dans essai.txt
cout<<"Et voila"; // sortie std
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Si tu veux vraiment une syntaxe du style oFile("index")<<"text", ce que tu pourrais faire serait d'implémenter une liste d'objets ofstream; tu peux faire ça par la STL ou par une classe de liste perso; dans ce cas il faudra surcharger l'opérateur () pour qu'il te renvoie une référence sur l'objet correspondant à l'index.
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
et bien j'ai une idée créer une classe qui va dérivé publicement de fstream et de iostream et creer une fonction dans ta classe qui surcharge le >> et  le <<

et une autre fonction qui permet de modifier la sortie et affiche le texte
Messages postés
8
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
3 mars 2009

Je vais essayer la reponse de gamemonde, c est effectivement la direction dans laquelle je voulais aller. Je ne suis pas tres doue avec la surcharge de << et >>. Ca va me prendre un peu de lecture. Si j ai quelque chose, je reviens ici pour le dire. Merci.
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
un exemple de surcharge

CClasse & CClasse::operator >>(string sChaine)
{
     cout >> sChaine;
     return this;


CClasse >> "salut";

affiche

salut
Messages postés
8
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
3 mars 2009

Merci beaucoup gamemonde. Je sais que je dois paraitre vraiment obtu avec iostream mais je n arrive pas a faire tourner le programme (voir ci dessous). De plus, quelle est la raison exacte de passer la classe comme reference avec <<. Je n ai jamais vu ca lorsqu on surcharge un operateur (comme +, par exemple).



#include
#include <string>
using namespace std;
class CClasse: public iostream
{
public:
CClasse(){};
~CClasse(){};
CClasse& operator << (string);
}

CClasse& CClasse::operator << (string sChaine)
{
cout << sChaine;
return this;
}

main()
{
CClasse a;
a << "salut";

}
Messages postés
8
Date d'inscription
jeudi 6 septembre 2007
Statut
Membre
Dernière intervention
3 mars 2009

Bonjour Gamemonde. Merci pour le temps que tu m as consacre. Ton programme compile et se comporte parfaitement bien. Mon probleme est que je suis toujours incapable d analyser les erreurs que j ai faites. Je pense qu a la base, je n ai pas pu identifier exactement ce sur quoi je cherchais de la documentation. Par exemple, la raison pour laquelle CClasse doit etre passe par adresse (pointeur vers this dans le return et operator << comme reference a CClasse). Je suppose que tout cela est du au fait que cout ne peut etre atteint que par adresse. Si tu as encore une minute peux tu me dire ou aurais-je du chercher pour mettre au point tout seul la bonne syntaxe. Je n ai rien trouve qui pouvait m etre utile sur cout et iostream dans la litterature.