Surcharge operator <<

elninodu42 Messages postés 4 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 2 novembre 2010 - 1 nov. 2010 à 00:11
elninodu42 Messages postés 4 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 2 novembre 2010 - 2 nov. 2010 à 11:48
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 nov. 2010 à 10:33
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
0
elninodu42 Messages postés 4 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 2 novembre 2010
2 nov. 2010 à 10:47
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??
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 nov. 2010 à 11:04
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
0
elninodu42 Messages postés 4 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 2 novembre 2010
2 nov. 2010 à 11:18
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??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elninodu42 Messages postés 4 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 2 novembre 2010
2 nov. 2010 à 11:48
c'est bon j'ai trouver une solution merci ;)
0
Rejoignez-nous