NSTRING - CLASSE POUR CHAINE DE CARACTÈRE, CA VOUS DIS? (VC++, 6)

cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008 - 16 mars 2003 à 10:32
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 23 févr. 2004 à 18:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10557-nstring-classe-pour-chaine-de-caractere-ca-vous-dis-vc-6

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
23 févr. 2004 à 18:22
salud!

ta classe a l'air pas mal... (G vu la vers 1.5)

que pensez vous de mes BString???
http://www.cppfrance.com/code.aspx?ID=19668
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
25 avril 2003 à 01:10
Mise à jour de la class à cette adresse!!!
http://www.cppfrance.com/article.aspx?Val=1715



~(.:: NitRic ::.)~
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
23 avril 2003 à 14:04
S'lut...
J'ai testé ta classe avec l'environnement de développement [DEV-C++] et, après une ou deux modifs, tout fonctionne très bien...
Merci car je débutais le même genre de développement...
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
16 mars 2003 à 16:13
Ok, merci infiniment pour tous ces commentaires, critiques et autres ...
Je vait reviser complètement la classe(le memory leak surtout) et modifier/ajouter quelques petites choses ...

Si vous avez autres choses à dire sur(ou contre) ma classe, ne vous gener surtout pas ... Ca ne fera que m'aider à m'améliorer =P

Sur ce, merci && @++;
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
16 mars 2003 à 11:52
- Pourquoi as-tu deux définitions pour beaucoup de méthodes, comme Size() par exemple ? Je suis d'accord avec la première méthode (long Size() const) mais pas avec la deuxième (long Size(const char *nString)). La deuxième n'a aucun rapport avec l'instance courante, donc tu aurais pu la mettre en méthode statique. Et puis quel est l'intérêt ? Si l'utilisateur veut utiliser tes méthodes, il utilise ton objet. Là on doit construire un objet avec "je ne sais pas trop quoi dedans" pour utiliser la méthode obj.Size(MA_CHAINE).

- Même remarque qu'Haldwin sur les méthodes constantes qui modifient des attributs de l'instance. Bizarre d'ailleurs que VC++ laisse passer ca.

- Sinon je viens de passer ton programme démo au Purify (outil qui détecte entre autre la mémoire non désallouée):

[I] Summary of all memory leaks... {958 bytes, 36 blocks}
[W] MLK: Memory leak of 129 bytes from 3 blocks allocated in NString::_Mid(char const*,long,long) [nstring.exe]
[W] MLK: Memory leak of 86 bytes from 2 blocks allocated in NString::_Mid(char const*,long,long) [nstring.exe]
[W] MLK: Memory leak of 80 bytes from 2 blocks allocated in NString::+=(char const*) [nstring.exe]
[W] MLK: Memory leak of 80 bytes from 2 blocks allocated in NString::=(NString const&) [nstring.exe]
[W] MLK: Memory leak of 72 bytes from 3 blocks allocated in NString::+=(char const*) [nstring.exe]
[W] MLK: Memory leak of 66 bytes from 3 blocks allocated in NString::=(char const*) [nstring.exe]
[W] MLK: Memory leak of 47 bytes from 1 block allocated in NString::_Mid(char const*,long,long) [nstring.exe]
[W] MLK: Memory leak of 47 bytes from 1 block allocated in NString::_Mid(char const*,long,long) [nstring.exe]
[W] MLK: Memory leak of 44 bytes from 1 block allocated in NString::=(char const*) [nstring.exe]
[W] MLK: Memory leak of 43 bytes from 1 block allocated in NString::_Insert(char const*,char,long) [nstring.exe]
[W] MLK: Memory leak of 40 bytes from 1 block allocated in NString::=(char const*) [nstring.exe]
[W] MLK: Memory leak of 40 bytes from 1 block allocated in NString::NString(char const*) [nstring.exe]
[W] MLK: Memory leak of 25 bytes from 1 block allocated in NString::+=(char) [nstring.exe]
[W] MLK: Memory leak of 24 bytes from 1 block allocated in NString::=(char const*) [nstring.exe]
[W] MLK: Memory leak of 18 bytes from 1 block allocated in NString::ToLower(char const*) [nstring.exe]
[W] MLK: Memory leak of 18 bytes from 1 block allocated in NString::Reverse(char const*) [nstring.exe]
[W] MLK: Memory leak of 18 bytes from 1 block allocated in NString::+=(double) [nstring.exe]
[W] MLK: Memory leak of 17 bytes from 1 block allocated in NString::_Mid(char const*,long,long) [nstring.exe]
[W] MLK: Memory leak of 14 bytes from 1 block allocated in NString::_Delete(char const*,long,long) [nstring.exe]
[W] MLK: Memory leak of 14 bytes from 1 block allocated in NString::+=(NString const&) [nstring.exe]
[W] MLK: Memory leak of 9 bytes from 1 block allocated in NString::FreeExtra(void) [nstring.exe]
[W] MLK: Memory leak of 7 bytes from 1 block allocated in NString::Right(long) [nstring.exe]
[W] MLK: Memory leak of 6 bytes from 1 block allocated in NString::=(NString const&) [nstring.exe]
[W] MLK: Memory leak of 6 bytes from 1 block allocated in NString::Left(long) [nstring.exe]
[W] MLK: Memory leak of 6 bytes from 1 block allocated in NString::=(char const*) [nstring.exe]
[W] MLK: Memory leak of 1 byte from 1 block allocated in NString::NString(char const*) [nstring.exe]
[W] MLK: Memory leak of 1 byte from 1 block allocated in NString::NString(char const*) [nstring.exe]
Haldwin Messages postés 77 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 16 juin 2004
16 mars 2003 à 11:24
Salut NitRic,

Je t'ecris pour deux ou trois petits commentaires. Au premier coup d'oeil, ta classe en jete un max... Il y a pas mal de possibilités.
Mais as-tu debuggé? Il y a un petit soucis dans ta méthode NString operator=(const int nInt) -> Je pense que c'est pas bien grave car les autres méthodes 'operator =' marche bien!
Il y a aussi un autre truc. Essayes de mettre en commentaire la méthode :NString operator=(const char *nString) et tu verras que ta classe marche si tu ecris String t; t="Test"; Pourquoi? Parce qu'elle convertie en premier ta chaine "Test" en String puis appel "operator=" avec en param une String!!! Ceci marche toujours a partir du moment que les param de tes constructeurs soient identiques au param de la méthode souhaitée mais non développée.
Aussi dans tous les param de tes methodes, tu mets parfois des "const" sans réferences. Je te conseille soit de supprimer tes "const" soit de rajouter &. ex: const char& c.
Tu as declaré :long LTrim()const; ce qui veux dire: LTrim() est une méthodes constante, elle ne modifie pas les attributs de ma classe. Or ta méthode modifie les attributs de ta classe puisqu'elle supprime les blancs.. Il vaut mieux par conséquent supprimer le "const" car il ne s'agit pas d'une methode constante.
Une petite remarque: pourquoi tu ne met pas tes attributs et methodes 'protected' en 'private'?
Le dernier point.... Il te faudrait comme te l'as deja dit Xs utiliser l'operateur +... Je te conseille de l'utiliser en fonction amie car avec une seule fonction et l'histoire de la conversion de char en String par ex, tu pourras additionner tout ce qui sera utilie pour ta classe.
Un petit bonus et la ta classe devient pro: Ajoute les surcharges d'operateur pour le 'cin' et 'cout'. car si tu developpes en C++, il faut oublier le printf et scanf. Cette surcharge permettra d'ecrire:
String maString;
cout<<"entrez une chaine (sans espace)"<<endl;
cin>>maString;
cout<<maString<<endl;
pour voir un exemple:http://www.cppfrance.com/article.aspx?Val=1311
(Les fichiers à télécharger ont été mis a jour mais pas le texte du debut qui dit:'l'operateur + n'est pas encore implémenté'...)

A part ça, c'est comme l'a dit Xs, la premiere fois que je vois une classe String si complète... Chapeau bas!!!
Continues comme ça!!!
Bon dev,

<<-- H@ldwin -->>
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 mars 2003 à 10:32
pff.... je developpe le meme genre de class actuellement. A l'exception que la tienne ma totallement découragé ! As-tu vu à quel point elle est complete ? non, serieusement, elle est géniale !

TU a juste oublié de coder l'operateur "+". Le "+=" dit : "soit S1 et S2 des Strings, S1 += S2 concatene S1 et S2, puis met le resultat dans S1'.
Or, quelques fois, tu peux avoir besoin de dire "soit S1, S2 et S3 des Strings, S1 + S2 concatene S1 et S2 puis copie la nouvelle chaine dans S3." Ce qui laisse intacte S1 et S2. Ou trouver S3 ? tout simplement en argument dans une fonction, par exemple !

Sinon, vraiment bien ta classe !