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

Signaler
Messages postés
5
Date d'inscription
samedi 11 avril 2009
Statut
Membre
Dernière intervention
9 août 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
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

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
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.