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

Signaler
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
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

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Mise à jour de la class à cette adresse!!!
http://www.cppfrance.com/article.aspx?Val=1715



~(.:: NitRic ::.)~
Messages postés
209
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
14 août 2007

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...
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 && @++;
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

- 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]
Messages postés
77
Date d'inscription
lundi 15 avril 2002
Statut
Membre
Dernière intervention
16 juin 2004

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 -->>
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008

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 !