Comment ajouter du texte par surcharge d'opérateur langage C

laurentdav Messages postés 5 Date d'inscription samedi 11 avril 2009 Statut Membre Dernière intervention 9 août 2009 - 6 août 2009 à 14:57
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 7 août 2009 à 23:39
Bonjour,

Je n'arrive pas à programmer mon opérateur + pour pouvoir ajouter du texte.

Je vous remercie par avance.

Le code est le suivant

#include <cmath>
#include <fstream>
#include

using namespace std;

class chaine
{
char * ch;
public:
chaine(char* cha=""){ch=cha;}
chaine(const chaine & cha){ch=cha.ch;}
~chaine(){if (ch=="") delete [] ch;}
int longueur() const;
friend ostream & operator<<(ostream & os,const chaine & cha){os<<cha.ch<<endl;return os;}
chaine& operator =(const chaine & cha){ch=cha.ch;return *this;}
chaine operator +(const chaine & chb) const {return chaine(ch);}

};

int main(){
chaine c1("Bonjour");
cout<<c1;
chaine c2("a tous");
cout<<c1+c2;

}

1 réponse

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
7 août 2009 à 23:39
Salut,

Il faut que ton opérateur concatène le char* contenue dans la chaîne passée en paramètre (chb) le char* de la chaîne courante, contenue dans le membre ch.

Problème, tu ne peux pas concaténé car ch pointe sur une "a tous", figé dans la mémoire.

Il faut donc que tu fasses des allocations et des libérations au niveau de ton char * ch.
Il faut qu'il pointe sur un tableau de char (= new char[length]) alloué dynamiquement par toi.
Ainsi, dans le cas du = ou du constructeur, tu alloues puis fait une copie.
Et dans le cas du +, tu alloues une nouvelle zone, tu concatène dans cette nouvelle zone, et tu libères l'ancienne.

Et tu libères dans le destructeur.

Au fait, il doit y avoir 1 million de classes "chaine" sur le web.
0
Rejoignez-nous