begin process at 2012 05 30 04:39:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

surcharge stream operator


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

surcharge stream operator

jeudi 26 février 2009 à 22:09:58 | surcharge stream operator

Joan_Andre

Bonjour,

Quelqu un pourrait il m expliquer la raison pour laquelle le code ci dessous ne fonctionne pas (je ne parviens pas a faire "entrer" le std::end dans le streaming. J ai aussi essaye avec ostream& comme argument d operator).

Merci d avance.

#include <iostream>

#include <string>

using namespace std;

class OutClasse

{

public:

OutClasse& operator << (string);

OutClasse& operator << (int);

OutClasse& operator << (ostream);

};

OutClasse& OutClasse::operator << (string sChaine)

{

std::cout << sChaine;

return *this;

};

OutClasse& OutClasse::operator << (int sChaine)

{

std::cout << sChaine;

return *this;

};

OutClasse& OutClasse::operator << (ostream sChaine)

{

std::cout << sChaine;

return *this;

};

main()

{

OutClasse a;

a << "salut" << std::endl;

}

dimanche 1 mars 2009 à 01:35:35 | Re : surcharge stream operator

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Il faut savoir que std::endl n'est pas une constante, mais une fonction templaté, donc tu peux essayer ceci:


#include <iostream>
#include <sstream>

class OutClasse
{
public:
  OutClasse& operator<<(const std::string& sChaine);
  OutClasse& operator<<(int sChaine);
  OutClasse& operator<< (std::ostream& sChaine);
};

OutClasse&
OutClasse::operator<<(const std::string& sChaine)
{
  std::cout << sChaine;

  return *this;
};

OutClasse&
OutClasse::operator<<(int sChaine)
{
  std::cout << sChaine;
  return *this;
};

OutClasse&
OutClasse::operator<< (std::ostream& sChaine)

{
  std::cout << sChaine;

  return *this;
};

OutClasse&
operator<<(OutClasse& out,
       std::ostream& (*fn)(std::ostream&))
{
  std::ostringstream oss;
  fn(oss);
  out << oss.str();
  return out;
}

int
main()
{
  OutClasse a;
  a << "salut" << std::endl;
}

lundi 2 mars 2009 à 15:36:24 | Re : surcharge stream operator

Joan_Andre

Merci, c est vraiment la solution a mon probleme. Je n aurais vraiment pas pu imaginer cela tout seul.

Histoire de ne pas me laisser porter mais d essayer de comprendre l information que je viens de recevoir, une idee de lecture pour m aider a hisser mes connaissances a ce niveau ? Je pense avoir lu la litterature standard necessaire pour etre << serieux >> en C++ mais la, il semble qu il y a une specialite (certainement plusieurs) qui me fait defaut.

Merci encore.
lundi 2 mars 2009 à 17:18:42 | Re : surcharge stream operator

CptPingu

Administrateur CodeS-SourceS
Lorsque tu fais un :
std::endl, il devine tout seul les templates nécessaires, et te met automatiquement un: std::endl<char, char_traits<char> >.
Comme un endl est une fonction templaté, pour qu'il accepte de le prendre en argument de operator<<, j'ai dit à operator de prendre un pointeur sur fonction, dont la signature pourrait correspondre à std::endl.

Maintenant, bien que cette solution fonctionne, quelques remarques:
- std::endl est à manier avec précaution. std::endl équivaut à: '\n' << std::flush
Ce qui peut nuire au preformance. Un simple '\n' est donc souvent à préconiser.
- std::endl peut être remplacer pour éviter cela. Par exemple avec un std::nl (fait maison :p):

namespace std
{
  template <class charT, class traits>
  basic_ostream<charT, traits>&
  nl(basic_ostream<charT, traits>& os)
  {
#ifdef __WIN32__
    os << "\r\n";
#else
    os << '\n';
#endif
    return os;
  }
}

int main()
{
  OutClasse a;
  a << "salut" << std::nl;
}

mardi 3 mars 2009 à 15:27:20 | Re : surcharge stream operator

Joan_Andre

Bon, visiblement il faut que j etudie serieusement les << basic template member >> d une part et les << traits mechanisms >> d autre part. Ca me dit quelque chose mais cela doit faire tres longtemps...

En tout cas merci. Non seulement, mon probleme specifique est resolu mais en plus j ai un bon point de depart pour cerner mes lacunes et y remedier.


Cette discussion est classée dans : return, cout, std, operator, outclasse


Répondre à ce message

Sujets en rapport avec ce message

que des boucles. [ par pratix ] Salut à tous.Je post mon prg cherchenbr modifié (voir sujet précédent ''int main" ).Programme compilé avec visual C++ 06. ( zéro erreur )j'ai essay erreur incomprise ... [ par tontonjab ] bonjour ... j'ai un probleme avec mon code source, et j'aimerais bien que vous y jetié un coup d'oeil pour m'aider !////////////////////#include #incl Lecture impossible [ par NAVIE ] Bonjour, j'écris au sujet d'un programme que j'ai créé pour lire un fichier. Celui-ci est bien compilé mais il ne peut pas lire un fichier sans que je Aide [ par Hellboy67 ] Voila j'ai un exo pour les cours de prog a faire dont le code source est le suivant:# include # include using std::cout;using std::cin;using std::end calcul d'un modulo [ par cabarrus ] Qui peu m'aidé s.v.p pour ce problème...Ecrire un prog qui demande 2 nbres à l'utilisateur et qui affiche le reste de la division du 1er par le second surchage d'operateur [ par bolo ] j'ai prob avec la surchage d'operateur de ma classepouvez vous m'aider#include // les classes#include class date{public : date (); da debutant pas très doué [ par busta74 ] je viens de commencer a lire un livre pour apprendre le c++ et a la fin de chaque chapitre il faut creer un programme pour mettre en application ce qu dur d'apprendre c++ [ par busta74 ] je dois ecrire un programme qui exploite des fonction individuelles pour demander l'age, lire cet age saisi au clavier , et utiliser cette valeur pour problème de chaine de caractères (débutant) [ par graall ] salut à tous, j'ai un gros problème avec ce code : (le problème est expliqué dans les commentaires)     FILE *pReference = fopen(reference_path, "r") Allocation statique ou dynamique [ par luhtor ] Bon alors, j'ai un exemple de programme. Mais je me pose la question de sa validité sachant que ce que vous allez voir. C'est correct dans certain lan


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales