Surcharge operator <<

Signaler
Messages postés
4
Date d'inscription
dimanche 31 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2010
-
Messages postés
4
Date d'inscription
dimanche 31 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2010
-
Bonjour,

Je dois trouver une solution permettant d'afficher dans un flux de chaine. Je ne peux pas utiliser de string...

Je dois donc faire une surcharge d'operateur<<, j'ai déjà fait celle pour le =, et le +.

Je n'ai par conter aucunne idée de comment faire pour << si ce n'est que la declaration : ostream &operator<<(ostream & out,CChaine &obj) je ne sais pas si cette declaration est correct...

Est ce que quelq'un pourrait me donner une piste afin que je puisse completer ma methode? Je postes le code de mon constructeur si cela peut aider...
CChaine::(char*texte)
{
m_size=strlen(texte);
chaine=new char[m_size+1]
strcpy(chaine,texte)
}
Merci

5 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
Je n'ai pas beaucoup de détail, mais je dirais que si "chaine" est ton attribut qui contient la chaine, alors le code devrait ressembler à cela:

std::ostream& operator<<(std::ostream& out, const CChaine& obj)
{
  out << obj.chaine;
  return out;
}


PS: Évite les using namespace std, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
4
Date d'inscription
dimanche 31 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2010

Merci de ta réponse qui ressemble à ce que j'ai fait sauf que j'ai du mettre la fonction en friend étant donné que mon chaine était en privé. Par contre j'essai maintenant de surcharger un cin .

istream& operator<<(istream& in, const CChaine& obj)
{
in >> obj.chaine;
return in;
}

Le soucis c'est que si par exemple je tapes test, je n'ai que le t qui est recupérer??
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
120
On évite généralement d'utiliser le mot clé friend. Ce que tu as fais est correcte, mais voici une autre solution qui se vaut aussi:

Tu fais une méthode publique dans ta classe:
void CChaine::print(std::ostream& out)
{
  out << chaine;
}


puis tu fais un:
std::ostream& operator<<(std::ostream& out, const CChaine& obj)
{
  obj.print(out);
  return out;
}


Pour ton deuxième problème c'est normal, tu dois faire un std::getline, et non un simple "std::cin >>".
http://www.cplusplus.com/reference/iostream/istream/getline/

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
4
Date d'inscription
dimanche 31 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2010

Oui j'avais remarqué que avec un getline le code fonctionnait. Mais la question que je me pose c'est de savoir si oui ou non il est possible de faire ce getline dans ma surcharge d'operateur et non dans le main??
Messages postés
4
Date d'inscription
dimanche 31 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2010

c'est bon j'ai trouver une solution merci ;)