Operator [] ds une classe string pr retourner un caractère

Signaler
Messages postés
19
Date d'inscription
samedi 20 octobre 2001
Statut
Membre
Dernière intervention
2 avril 2004
-
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
-
Salut à ts,

voilà j'ai un petit souci ds une classe String que j'ai fait. J'ai inclu un opérateur [] qui comme un char* retourne le char à la position donnée.Pour récupérer le caractère, pas de souci, seulement voilà je voudrai que l'opérateur normal modifie le caratère retourné ( c pr ça que je retourne une référence ) et que l'opérateur marche. ni l'un ni l'autr ne marche

Voilà mon code

// m_Str est un char*, membre de ma classe et représentant
// la chaîne de caractère.
// m_wLen est la longueur de la chaîne

char& String::operator[](const int Pos)
{
  static char ch = 0;
  if(Pos >= m_wLen)
    return ch;
  
  return m_Str[Pos];
}


Voilà, aidez-moi plz...
Nico

1 réponse

Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
Bonjour,
je te donne la piste pour ton opérateur []
à toi de continuer avec == selon le sens que tu veux lui donner (égalité de contenu ou des pointeurs)

// m_Str est un char*, membre de ma classe et représentant
// la chaîne de caractère.
// m_wLen est la longueur de la chaîne
#include
#include <string>
using namespace std;

class String
{char * m_Str;
int m_wLen;
public:
String(char* p=0)
{
if (p)
{
m_Str = new char [strlen(p)+1];
strcpy(m_Str, p);
m_wLen = strlen(p);
}
else
{
m_Str=0;
m_wLen = 0;
}
}
~String() {delete[] m_Str;}
//oper = et Ctor de copie à faire ...
char& operator[] (int Pos)
{
if (!m_Str) throw "String vide";
if (Pos<0 || Pos>m_wLen) throw "Indice incorrect";
return m_Str[Pos];
}
const char* GetStr(){return m_Str;}
};
int main()
{
String s("vieuxLion");
cout << s.GetStr() << endl;//=> affiche vieuxLion
cout << s[0] <<s[1] << s[2] << endl;//on lit
s[3] = '\0';//on écrit
cout << s.GetStr() << endl;//=> affiche "vie"
try
{
cout << s[10] << endl;
}
catch(const char* p)
{
cout << "exception : " << p << endl;
}
return 0;
}

j'espère que ça te servira