Operator [] ds une classe string pr retourner un caractère
ngryman
Messages postés19Date d'inscriptionsamedi 20 octobre 2001StatutMembreDernière intervention 2 avril 2004
-
1 févr. 2003 à 23:20
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 2004
-
2 févr. 2003 à 11:48
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
A voir également:
Operator [] ds une classe string pr retourner un caractère
cs_vieuxLion
Messages postés455Date d'inscriptionsamedi 26 octobre 2002StatutMembreDernière intervention 6 avril 20048 2 févr. 2003 à 11:48
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;
}