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 | |||||||
| Auteur | Message | ||||||
|---|---|---|---|---|---|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |||||||
| Page : 1 | |||||||
Ptt-homme
|
# Posté le 22/05/2008 à 10:33:54 | ||||||
|
Groupe : Membres |
Bonjour à tous,
je suis désolé de venir vous voir, mais je dois rendre un devoir et je comprends pas pourquoi, ce que j'ai fait ne marche pas! Je dois réaliser un fichier avec des pointeurs et surcharge des opérateurs, mais le résultat obtenu ne donne pas ce que je souhaite! Je n'arrive pas à faire la concat + de deux chaines et aussi la comparaison == Voilà le programme: Code : C++
Merci de votre aide. Thomas
Édité
le 22/05/2008 à 11:33:18
par Ptt-homme
|
||||||
MicBeastKiller
|
# Posté le 22/05/2008 à 10:43:29 | ||||||
|
Groupe : Membres |
Salut,
utilise les balises code C++. mon compilo (je suis sous Code-Block) me signale deux oublis de ";" dans le code Code : C++
il faut écrire Code : C++
pour le reste, j'ai pas encore regardé.
Édité
le 22/05/2008 à 10:44:48
par MicBeastKiller
|
||||||
Ptt-homme
|
# Posté le 22/05/2008 à 11:31:22 | ||||||
|
Groupe : Membres |
Merci tout d'abord à toi pour ton aide, je ne connaissais pas les balises je vais faire de mon mieu à l'avenir.
Édité
le 22/05/2008 à 11:32:44
par Ptt-homme
|
||||||
MicBeastKiller
|
# Posté le 22/05/2008 à 13:19:05 | ||||||
|
Groupe : Membres |
Salut,
Pourquoi ne pas utiliser un booléen en type retour de ta méthode "==" ; par ailleurs, pourrais-tu expliquer ce que tu souhaites avec cette méthode. je pense que l'algo naïf serait : - comparer la longueur des deux mots - s'ils n'ont pas la même longueur, renvoyer false - sinon comparer lettre à lettre les deux mots - renvoyer false dès qu'une lettre est distincte - sinon renvoyer true Je crois que tu fais l'inverse (d'abord comparer lettre à lettre puis les longueurs) sauf erreur de ma part voici un code, certe pas très beau avec des return dans des boucles ou des if !!! Code : C++
pense à changer le type retour de cette méthode dans ta classe chaine. Pour la concaténation, je n'ai pas regardé. |
||||||
lmghs
|
# Posté le 22/05/2008 à 14:02:19 | ||||||
|
Groupe : Membres |
a- Il manque plein de const. Mais alors plein!
b- Tu va avoir des problèmes de symétrie sur tous tes opérateurs binaires. c- "text[0]" ne fait rien -- ne manquerait-il pas un " = 0;" ? d- L'opérateur [] doit renvoyer une référence, et il manque la surcharge qui renvoie une référence constante e- L'opérateur d'affectation doit renvoyer une référence (mais vu tes attributs membre (i.e. pas de pointeur), celui fourni par défaut suffit amplement, de même que pour le destructeur ; le jour où tu passes vers un pointeur, n'oublie pas le constructeur de copie) f- L'opérateur de concaténation ne doit pas renvoyer un pointeur mais une valeur |
||||||
Ptt-homme
|
# Posté le 22/05/2008 à 15:11:12 | ||||||
|
Groupe : Membres |
Arf, je ne comprends pas tout ce que tu viens de dire, je dois vraiment travailler dans cette matière pour moi c'est encore du charabia. En parcourant le net je viens de trouver la solution, mais quand je l'a compile chez moi elle plante et je crois qu'il y a un problème de pointeur mais je ne le trouve pas. De plus c'est vraiment loin de ce que j'avais pondu.
La voici : Code : C++
Déjà la grande différence avec ce que j'ai fait il utilise un pointeur dans la classe et moi je n'utilise juste qu'une chaine de carcatères! Ensuite tu entends quoi par il manque plein de constante? Pour finir pourquoi son programme ne marche pas? Car le mien je sais il est archi-mauvais! Quand je le compile chez moi il n'est pas capable d'afficher b et d il me met des caractères bizarres! Merci d'avance |
||||||
lmghs
|
# Posté le 22/05/2008 à 15:33:51 | ||||||
|
Groupe : Membres |
Cet exo a encore été corrigé ici même il y a moins de 10 jours (et encore)
|
||||||
Ptt-homme
|
# Posté le 22/05/2008 à 15:37:04 | ||||||
|
Groupe : Membres |
Bien mais tu sais pas comment je retrouve le lien sert à rien qu'il y ai deux poste pour la même chose?
Oui j'ai bien trouvé le sujet mais il n'y a pas la solution, que des brides de solution qui me dise que je pensais avoir compris les pointeurs mais qu'il n'en est rien! Cependant j'aimerais quand même savoir pourquoi la solution que j'ai trouvée sur internet ne marche pas! J'ai vraiment besoin d'avoir cet exo corrigé!
Édité
le 22/05/2008 à 15:57:03
par Ptt-homme
|
||||||
MatteX
|
# Posté le 22/05/2008 à 16:19:35 | ||||||
The cake is a lie!![]() Groupe : Membres |
Exemples corrects de surcharges d'opérateurs. Et encore j'ai pas utiliser inline.
En passant, je ne sais pas si c'est une demande du prof mais outre les classes de la SL on voit souvent des classes avec une Majuscule. Note : Sur VC++80, les fonctions déclarées dans les headers C pour C++ (soit sans '.h' et préfixé d'un c, ex : cstdio) font parti de l'espace de noms std. Code : C++
Note que le pointeur de chaîne ne doit JAMAIS être nul. Il devrait TOUJOURS pointer vers un espace mémoire valide ! Pour le inline, je ne sais pas si quelqu'un peut me répondre. Serait-il plus avantageux de déclarer mon opérateur '+' inline? En C++ tout les opérateurs de comparaison (==, !=, <, <=, >, >=) retournent un booléen. Les opérateurs d'affectation retournes une référence sur *this. Les opérateur arithmétiques (+, -, *, -, %) retournent une copie du résultat. Pourquoi ? Pour permettre des lignes d'instructions comme celle-là. Code : C++
Bon je penses que j'ai fait plus de 50% de ton travail... Pour les pointeurs va falloir que tu révises. D'ailleurs une bonne question que tu devrais te poser (et j'interdit quiconque de répondre à sa place) est « Pourquoi l'utilisation d'un temporaire pour conserver la chaine dans l'opérateur d'affectation ? ». Si tu sais répondre à ça c'est que tu comprend déjà moindrement les pointeurs.
Édité
le 22/05/2008 à 16:27:36
par MatteX
liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb Mon futur ex-blog | Logique : http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray! |
||||||
Ptt-homme
|
# Posté le 22/05/2008 à 18:29:28 | ||||||
|
Groupe : Membres |
Merci pour ta réponse, je n'ai pas le temps de répondre à ta question maintenant, mais je le ferai ce soir! Par contre pour le devoir le prof à demander de rédiger le devoir comme je te l'ai donné pas en utilisant des bools et autres c'est pour cela que je voulais savoir où se trouvait l'erreur dans le deuxième algo que j'ai fourni!
|
||||||
lmghs
|
# Posté le 22/05/2008 à 18:33:25 | ||||||
|
Groupe : Membres |
Pour les mêmes raisons que pour la concaténation, la comparaison devrait être libre.
Sinon, je suis assez perturbé par longueur qui puisse contenir le 0 terminal. Pour la capacité quelque part d'accord, pour la longueur pas vraiment, car length() devra soustraire ce 1 de trop. Et ... (subtilité) ... si on veut miner le comportement de std::string, il ne faut pas utiliser les fonctions str*(), mais les mem*(). Une std::string peut contenir un 0, ou plusieurs, cela n'aura aucun impact sur sa longueur. |
||||||
Ptt-homme
|
# Posté le 22/05/2008 à 21:19:08 | ||||||
|
Groupe : Membres |
Code : C++
Je suis désolé de paraitre rabajois mais je ne trouve pas pourquoi le compilateur m'affiche Perdu ! Gagne ! a: Bonjour b: b>o - d: <>o X>o c: Bonjour b>o - Bonjour b>o - Voilà j'aimerais juste pouvoir comprendre car je suis sur que c'est un problème de pointeur |
||||||
MatteX
|
# Posté le 22/05/2008 à 23:22:23 | ||||||
The cake is a lie!![]() Groupe : Membres |
@lmghs : mmmh... je suis d'accord qu'il est assez incohérent de contenir la longueur avec le '\0' terminal. Et pour le fonctionnement de std::string c'est vrai, mais je ne voulais pas non plus imiter le fonctionnement du std::allocator.
1) affiche() cout peut affiche des char* 2) operateur == ne compare que le premier caractère 3) Tes fonctions passent en paramètre des copies d'objet et tu n'as pas défini de constructeur par copie. Alors à la fin de la fonction, la copie est détruite ; appel du destructeur ; desallocation de l'espace mémoire pointée par toutes les copies du même objet. Résultat tu te retrouve a lire n'importe quoi en mémoire comme "b>o -", ce qui a la même longueur que "Maria". liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb Mon futur ex-blog | Logique : http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray! |
||||||
Eclyps
|
# Posté le 23/05/2008 à 11:19:38 | ||||||
Kenny Noël , Yep! Yep! Yep!![]() Groupe : Membres |
Faut vraiment essayer de ne pas mettre conio je pense pas que ça te donneras une très bonne note.
Conio n'est pas portable ! Si c'est juste pour le getch() de la fin mes getchar() de iostream c'est portable au moins.
Édité
le 23/05/2008 à 11:19:54
par Eclyps
|
||||||
MatteX
|
# Posté le 23/05/2008 à 15:27:52 | ||||||
The cake is a lie!![]() Groupe : Membres |
Citation : Eclyps
Faut vraiment essayer de ne pas mettre conio je pense pas que ça te donneras une très bonne note. Conio n'est pas portable ! Si c'est juste pour le getch() de la fin mes getchar() de iostream c'est portable au moins. Peut-être que oui, peut-être que non. Si son prof lui demande de faire un opérateur d'affectation qui retourne un void, je ne penses pas qu'il s'en fasse avec la portabilité ou les stantdards. Et s'il utilise conio.h c'est probablement parce que c'est la technique qu'il a vu en cours pour faire une "pause" à la fin d'un programme. Ce n'est pas mal en soi, et ça ne changera rien à sa note. liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb Mon futur ex-blog | Logique : http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray! |
||||||
Eclyps
|
# Posté le 24/05/2008 à 09:50:14 | ||||||
Kenny Noël , Yep! Yep! Yep!![]() Groupe : Membres |
Citation : MicBeastKiller
Salut, utilise les balises code C++. mon compilo (je suis sous Code-Block) me signale deux oublis de ";" dans le code Code : C++
il faut écrire Code : C++
pour le reste, j'ai pas encore regardé. Faut ce qu'il à écrit peux être compiler sans erreur pas la pêne de de réécrire convenablement (il manquer juste 4 ; ) La preuve tu peux compiler ça le débogueur ne te dira rien du moment que tu n'oubliras rien ;p : Code : C++
Bien sûr aprés ça fais très très moche .
|
||||||
MatteX
|
# Posté le 25/05/2008 à 00:58:47 | ||||||
The cake is a lie!![]() Groupe : Membres |
l'avantage d'écrire dans la forme qu'a présenté MicBeastKiller c'est qu'on oubli _jamais_ des point-virgules.
Que ça compile ne change rien, il doit écrire du code lisible dans le forum. liens utiles: FAQ C++ (developpez.com) | GotAPI.com | H-Deb Mon futur ex-blog | Logique : http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx Propriétaire d'un Dell Inspiron 1720, Core 2 Duo 2.4Ghz, 3Go DDR2, 8600M GT 256Mo. Avec Blu-Ray! |
||||||
Retour au forum "Langage C++" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
130 Zéros connectés |
9 requêtes |
0.1437s (0.1232s)
