TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 | |||
| Pseudo | Commentaire | ||
|---|---|---|---|
| Page : 1 | |||
MatteX
|
# Posté le 25/03/2008 17:28:49 | ||
The cake is a lie!![]() Groupe : Membres |
Bon choix de TP mais mauvaise utilisation des connaissances. Les opérateurs non pas la forme canonique et l'absence des méthodes constantes fait vraiment une différence pour l'utilisation fluide d'une telle classe. M@teo21 je dois te taper sur les doigts avec une règle pour le "using namespace" dans un fichier d'en-tête! liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb Mon futur ex-blog - Dernier Billet : 10 mars 2008 Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray! |
||
Midoagent47
|
# Posté le 25/03/2008 17:44:21 | ||
C++, C++ fort !![]() Groupe : Membres |
Ouuuin je suis pas le premier ![]() Très bon TP 19/20 (Because I never give twenty ! (Car je ne donne jamais de vingt !)) Mon Problème Du Siècle : [SFML.Network] Le serveur ne veut pas recevoir le paquet Clique : Mon site en construction (Plus maintenu) |
||
Pole
|
# Posté le 25/03/2008 17:49:21 | ||
Chieur professionnel![]() Groupe : Membres |
Mouais. Une fonction pour la concaténation aurait été mieux. Mais surtout, les fuites de mémoires! M@teo confond delete et delete[] (le 1er détruit un objet, le 2ème un tableau d'objet!) En savoir plus sur la théorie des cordes Je pense donc je suis. Je ne pense pas donc je suis ... journaliste! |
||
M@teo21
|
# Posté le 25/03/2008 18:40:01 | ||
Doh ! Nuts. Mmh, donuts !![]() ![]() |
Regrettable erreur de ma part pour le delete[], mais j'ai vite corrigé ça ![]() Etonnant que ni moi ni les relecteurs ne l'ayons vu ! Mattex > l'absence de const est volontaire car cette notion n'a pas été introduite pour les méthodes à cet instant du cours. Je ne peux donc pas le faire utiliser. En revanche, si tu avais lu attentivement la dernière partie, tu aurais vu que je signale clairement qu'il faudrait passer ces méthodes en constantes une fois que la notion aura été abordée dans la suite du cours
<tuto etat="redaction" mode="venere" target="c++" /> Ce qui se conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément. Nicolas Boileau (je suis fan) Autobiographe à ses heures perdues ![]() |
||
shadosan
|
# Posté le 25/03/2008 20:35:58 | ||
Programme moi un mouton.![]() Groupe : Membres |
ouais, pas mal ![]() et j'ai réussi à faire le ZString en une seconde ! ![]() Secret (cliquez pour afficher) class ZString : public std::string {}; (comment ça, je triche ? non mais ! )edit : je viens de finir la classe, avec les suppléments
Projets:[QT + C++] Openpad, un éditeur de texte pour me pratiquer avec Qt : 100% v1.3 |~| [QT + C++] Open maker, un rpg maker se rapprochant de Rpg Maker XP : 5% |~| [C++] Mazen, un générateur de donjons et/ou labyrinthes : 100% >> The daily WTF << "He who fights with monsters should look to it that he himself does not become a monster... when you gaze long into the abyss the abyss also gazes into you..." - Friedrich Nietzsche |
||
MatteX
|
# Posté le 25/03/2008 23:24:55 | ||
The cake is a lie!![]() Groupe : Membres |
@ M@teo21 : C'est pourquoi j'ai dit "l'absence", j'ai bien lu la note de fin.
liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb Mon futur ex-blog - Dernier Billet : 10 mars 2008 Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray! |
||
elmcherqui
|
# Posté le 26/03/2008 10:26:57 | ||
la vie est un programme![]() Groupe : Membres |
tres bon tp . clairement la note maximale . ps : a quand un tp pour l'heritage et polymorphisme ? J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone Bjarne Stroustrup - Créateur du langage C++ |
||
0nce
|
# Posté le 26/03/2008 11:57:45 | ||
![]() Groupe : Membres |
Très bon tuto, très didactique. Je note 18/20 pour les mêmes raisons que celles évoquées ci-dessus.
tuto : générateur de particules OpenGL autre site web: galerie photo en PHP/javascript, sans base de données |
||
total chaos
|
# Posté le 26/03/2008 12:44:52 | ||
le C++, j'en mange!![]() Groupe : Membres |
j'ai l'impression qu'il y a beacoup de copier coller dans ce tuto, par exmple au lieu de faire ça: Code : C++ - Afficher / masquer les numéros de ligne
on peut faire tout simplement: Code : C++ - Afficher / masquer les numéros de ligne
et ainsi de suite pour les autres operator l'univers est desormai fini, mais on n'en sait rien a propos de la betise humaine |
||
TheDead Master
|
# Posté le 26/03/2008 19:26:38 | ||
4 8 15 16 23 42![]() Groupe : Membres |
Me semble qu'il y a une fuite de mémoire ici: Code : C++ - Afficher / masquer les numéros de ligne
chaineCopie ne devrait-il pas être libéré ? |
||
Nanoc
|
# Posté le 26/03/2008 20:11:11 | ||
Apprenez à utiliser la STL !!![]() Groupe : Membres |
Hello, Premièrement je tiens à dire que c'est une excellente idée que de proposer un TP "technique" à ce stade du cours. J'ai cependant quelques remarques à formuler: 1) Il faudrait préciser quelques part que ZString ne sera jamais aussi bien que std::string malgrès tout le soin que les zéros pourront y apporter. A part dans un but pédagogique, il faut utiliser string qui est bien plus performant et sécurisé que ce qu'un zéro "lamdda" est capable d'écrire. 2) La signature des opérateurs = et + n'est pas correcte. En ce qui concerne +, le mieux serait de le mettre en dehors de la classe et d'utiliser un +=. Cela donnerait les bons réflexes aux lecteurs. 3) Je ne vois pas l'intérêt de la fonction membre "affiche()", puisque tu surcharges << sans l'utiliser. 4) Pouquoi la fonction membre "longueur()" ne renvoit pas simplement la valeur de "m_longueur" (qui devrait être un unsigned int). Ne serait-ce pas plus dans l'esprit "découpage utilisateur/codeur" que de mettre la fonction qui calcule réelement la longueur de "m_chaine" en privé ? 5) Idem pour la fonction "copie" pourquoi ne pas la mettre en privé ? 6) Dans les constructeurs de copie, pourquoi ne pas recopier directement la valeur de "m_longueur" plutôt que de recalculer la longueur de la chaîne ? 7) Pourquoi ne pas utiliser les fonctions "héritées" du C, tel que strlen et strcopy ? 8) Je crois que ça a été déjà dit, mais il y a une fuite de mémoire dans la fonction membre "copie()", la chaîne n'est pas libérée. Je ne suis plus assez débutant pour pouvoir évaluer ce tuto, mais je pense qu'il est dans l'ensemble assez bon. Nanoc Exercices de C++ pour tous les niveaux ! Mes projets en cours: Classe template de tableaux statiques avec interface STL Mes tutos: Tri de Shell --- [C++] Gestion des exceptions --- [C++] Manipulateurs de flux --- [C++] Les tableaux dynamiques avec std::vector (New) |
||
M@teo21
|
# Posté le 27/03/2008 17:28:12 | ||
Doh ! Nuts. Mmh, donuts !![]() ![]() |
J'ai déjà répondu à la plupart de ces remarques en commentaire de news. Pour la fonction de copie, ce n'est pas une erreur, elle n'est là que pour copier la chaîne et non pas pour supprimer celle qui lui est passée en paramètre. Il n'y aura pas de fuite de mémoire si l'utilisateur de la classe supprime lui-même la chaîne, ce qui se fait automatiquement quand on utilise des guillemets "". <tuto etat="redaction" mode="venere" target="c++" /> Ce qui se conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément. Nicolas Boileau (je suis fan) Autobiographe à ses heures perdues ![]() |
||
mostlaab
|
# Posté le 28/03/2008 20:04:17 | ||
|
toujours chercher pour savoir Groupe : Membres |
merci, très bien, pour le grand tuto bien pratique et surtout pour le temps consacré . la note maximale en découle , trés bien mérité. Citation : Mateo21 J'ai déjà répondu à la plupart de ces remarques en commentaire de news. je propose le lien : commentaires de news |
||
Thomthom
|
# Posté le 29/03/2008 21:16:27 | ||
go habs go![]() Groupe : Membres |
je ne donnerai jamais de notes parfaites, toutefois... c'est un EXCELLENT tp... Mais j'ai seulement une question: Quelle est l'utilité de faire trois méthodes rechercher()? Il me semble qu'on pourrait très bien utiliser celle de la chaine de caractères (recherche(char*)) pour ne rechercher qu'un seul caractère, non?
Diplomacy: Jeu en CLI avec gestion d'un royaume et d'une armée. "style WAAR..." (C++) avancement: |||||||||||||||||||| 15% 1 11-1: rah zut! On va quand même gagner ce soir...! |
||
008
|
# Posté le 30/03/2008 01:49:47 | ||
|
Groupe : Membres |
supprimer | ||
008
|
# Posté le 31/03/2008 03:32:08 | ||
|
Groupe : Membres |
supprimer | ||
lmghs
|
# Posté le 31/03/2008 21:43:00 | ||
|
Groupe : Membres |
Hé hé. Je viens de comprendre d'où venaient toutes ces ZString et autres questions sur les opérateurs dans le forum. Des petites remarques au fil de la lecture a- Ca serait vachement bien de ne pas entretenir les gens qui incluent <iostream> à tout bout de champs. <iostream>, c'est pour les 4 flux globaux. Pour déclarer dans les .h, c'est <iosfwd>. Pour définir (!=déclarer) les 2 opérateurs d'extraction et d'injection, c'est respectivement <istream> et <ostream> <iostream> n'est pas un en-tête magique qu'il faut mettre partout, les temps de compilation sont déjà assez longs comme ça. Et surtout, pas de using dans un .h ! Encore moins le using std. b- Une longueur de chaine ne peut pas être négative. Autant utiliser size_t (ou un nom approchant) c- "quelle que soit la classe qu'on écrit, il est toujours conseillé d'écrire le constructeur de copie " C'est faux. Seulement si il y a des données membres qui sont en fait des ressources brutes dont la classe est responsable -- comme c'est le cas ici. Ou si on veut/doit interdire pour raison de sémantique d'entité. d- Bien que le destructeur ne soit pas virtuel! (même si le chapitre correspondant n'a pas été vu) e- Les deux utilisations du constructeur d'initialisation/conversion ne sont pas identiques. L'utilisation avec "=" n'est pas possible si le constructeur est déclaré "explicit" f- Hum ... Ne pas utiliser strlen est un mauvais conseil. Le syndrome du NIH est une source interminable de problèmes, une vraie plaie. Dans un tuto sur la réécriture de la lib C, je ne dis pas. Dans un tuto sur l'écriture d'une classe de chaine, il y a déjà bien assez à faire, non ? Surtout si c'est pour donner les deux fonctions avec un "voilà, c'est comme ça et ça marche". Au final ils risquent juste de retenir qu'il faut réimplémenter la libc parce qu'ils font du C++. Apprendre à bâtir à partir de l'existant est également important. g- Très bien de s'attarder sur le partage, et qu'il faille impérativement dupliquer. (Même s'il est faux de dire que la constante litérale "Bonjour" puisse être supprimée )h- Le constructeur d'initialisation/conversion appelle deux fois le calcul de longueur. La solution efficace est d'appeler strlen, puis de faire tout simplement un memcpy (par construction (comme on dit en maths) la chaine source est zéro-terminée, et on connait la longueur des deux tableaux) Même remarque pour la copie. i- A un moment donné, tu parles de l'inadéquation de la liste d'initialisation. Tu n'y es pas revenu comme promis (j'ai fais une recherche sur "liste"), et je ne vois pas en quoi ce n'est pas utilisable ici. Code : C++ - Afficher / masquer les numéros de ligne
(Les optimisations se voient toujours dans un second temps. Donc dans un second temps : l'empty strings optimization, et dans un troisième : la small strings optimization. k- Même si la syntaxe de l'opérateur d'injection est barbare, elle n'est pas compliquée au point de devoir lier la classe à une donnée globale qui est std::cout. Toujours décorréler l'affichage du métier. Il ne faut pas leur donner de mauvaise habitudes. l- s/combiner/concaténer/ m- Vu que le constructeur d'init/conversion n'est pas explicit, inutile de surcharger deux fois l'opérateur d'affectation. Le seul gain est de type optimisation. Et comme chacun le sait, cela peut être vu dans un second temps. Et encore, il y a moyen de gratter bien plus sur du vrai code -- cf les concatenators qui squattent illégalement la std::string de la STLPort. n- L'opérateur d'affectation ne doit pas renvoyer de copie, mais une référence sur *this o- Non. L'opérateur d'affectation bosse à l'envers Toujours allouer avant de libérer -- en passant par un temporaire bien évidemment (Bon, c'est bien de ne pas être tombé dans le piège du test visant à contrer l'auto affectation.) Eventuellement, il y a la feinte du swap qui s'applique ici. p- Comme dit plus haut, il manque les const pour les opérateurs -- et ailleurs. (Et je ne démordrais pas qu'il faut commencer par montrer les bonnes pratiques, car ce code, des zéros sont capables de le copier-coller dans du code industriel )q- J'en avais parlé dans mes précédentes critiques au sujet des opérateurs, cette forme d'opérateur binaire membre est non idiomatique et serait mieux à être passée sous silence. r- L'information comme quoi cela n'a pas marché du premier coup ne fait que valider le fait que le syndrome du NIH, c'est mal :P s- De nouveau de la duplication de code (on entre limite dans le non respect du DRY cette fois ) pour l'opérateur de concaténation.t- copie() devrait être statique. Mais str(n)cpy est bien aussi. :P Soit des pinaillages comme d'hab'. Même si certains méritent fortement d'être pris en compte. Sinon bonne initiative. Très bien de montrer une classe à sémantique de valeur qui est responsable d'une ressource brute. C'est un des cas d'école qu'il est important de maitriser. |
||
008
|
# Posté le 01/04/2008 23:11:38 | ||
|
Groupe : Membres |
Est-ce que quelqu'un pourait me donner le code pour les 3 methodes recherche merdi d'avance
|
||
angelsafrania
|
# Posté le 03/04/2008 16:09:54 | ||
623![]() Groupe : Membres |
Il n'y a pas le principe d'amitié dans le code pour les opérateur c'est bien dommage ça peux évité d'avoir plein de fonction annexe
Projet Actuel : Faire le site perso le plus vite possible en XML/XSLT compatible mobile + modularité formidable (enfin des trucs de rêve) |
||
lmghs
|
# Posté le 03/04/2008 18:27:13 | ||
|
Groupe : Membres |
@angelsafrania: Nous sommes dans un cas où l'amitié n'apporte rien. De plus ces fonctions que tu dis "annexes" ne le sont pas vraiment. Elles deviennent nécessaires quand on veut interfacer cette classe, ZString, avec des API façon C de manipulation de chaines de caractères.
|
||
zoro_2009
|
# Posté le 24/04/2008 22:14:36 | ||
![]() Groupe : Membres |
Citation : Mateo dans un chapitre précédent Dans les .h, il est recommandé de ne jamais mettre la directive using namespace std; car cela pourrait avoir des effets néfastes lorsque vous utiliserez la classe par la suite. Par conséquent, il faut rajouter le préfixe "std::" devant chaque string du .h. Sinon, le compilateur vous sortira une erreur du type "string does not name a type". Citation : Mateo dans ce chapitre Code : C++
|
||
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
Fil RSS |
XHTML 1.0 |
CSS 2.0
Edité par Simple IT SARL :
Nous contacter
| Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Vous souhaitez apparaître ici ? Contactez-nous.
447 Zéros connectés |
6 requêtes |
0.0365s (0.0228s)
