Need Help En C++, surcharge d'opérateur |
24/08/2005 - 12:59:19 |
Post
#1
|
|
Group: Member Posts: 1 605 Joined: 24/02/2005 Team: MeB |
Je débute en C++ (j ai acheté un livre sur le sujet), j'ai un problème sur un exemple ...
J'utilise l' IDE DevC++ basé sur le compilateur gcc, et je travaille sous windows 2000. Est-ce que quelqu'un connait bien ce langage ? Plus particulièrement la surcharge d'opérateur ? |
|
|
24/08/2005 - 13:05:46 |
Post
#2
|
|
Group: 17 Buddies Posts: 13 317 Joined: 27/02/2004 Team: nG |
|
|
|
24/08/2005 - 13:28:43 |
Post
#3
|
|
Group: Member Posts: 1 605 Joined: 24/02/2005 Team: MeB |
Voilà mon livre me propose un exercice permettant de créer l'équivalent de la classe string du C++.
nom de la classe: chaine membres données: longueur courante de la chaine et un pointeur sur la zone allouée la classe doit contenir 3 constructeurs: chaine() // initialise une chaine vide chaine(char *) // initialise la chaine avec une chaine passée en paramètre ex: chaine("toto"); chaine (chaine &) // constructeur de recopie les opérateurs suivants sont à définir: = pour affectations d objets de type chaine (ex, si a et b sont de type chaine --> a=b) == pour examiner l égalité de 2 chaines + pour concaténer 2 chaines (si a et b sont 2 chaines, a + b sera une nouvelle chaine formée de la concaténation de a et b, a et b restant inchangées) [] pour accéder à un caractère de rang donné d'une chaine (ex: si a est une chaine, a[i]='x') Les opérateurs == et [] fonctionnent. J'ai testé l opérateur = aussi. Le + me pose problème car lorsque je fais g = e + f (g,f,e étant de type chaine) j'obtiens une erreur de compilation à la ligne g = e +f: no match for 'operator=' in 'g = chaine::operator+(chaine&)(((chaine&)(&f)))' Pour plus de clarté je n'ai conservé que le code utile c a d les operateurs = et +. Pour limiter la taille du post, le projet est dispo ici: http://luc.heraud.free.fr/formation/ (il y a 3 fichiers) Si j'interprète bien, le message d'erreur semble indiquer que ça vient de l operateur =, hors lorsque je teste l operateur = tout seul , il fonctionne. C'est le mix des operateurs = et + qui ne va pas bien bien apparement. En gros j ai l impression qu il faut trouver une syntaxe permettant de passer le nouvel objet créé par l'operateur + vers l operateur =. J'espère que mon langage n'est pas trop hermétique lol. Merci d'avance pour ton aide (IMG:http://forum.17buddies.rocks/style_emoticons/default/icon_jap.gif) This post has been edited by capitaine-caverne: 24/08/2005 - 13:38:27 |
|
|
24/08/2005 - 14:29:14 |
Post
#4
|
|
Group: 17 Buddies Posts: 5 245 Joined: 15/01/2004 Team: KiNdReD |
fait longtemps que je n'ai pas joué avec ça mais je crois que tu as un pb de typage sur le retour de l'opérateur +
essaye avec chaine & operator + (chaine &); |
|
|
24/08/2005 - 14:56:34 |
Post
#5
|
|
Group: Member Posts: 1 605 Joined: 24/02/2005 Team: MeB |
ça compile, mais ya un warning avec "reference to local variable ch2 returned". En gros ça retourne quelque chose qui n existe plus. C est presque le bon truc, il faudrait juste arriver à passer par le constructeur de recopie peut etre ?
Trouvé, il manquait des const par ci par là (IMG:http://forum.17buddies.rocks/style_emoticons/default/siffle.gif) ,voilà le fichier en tete corrigé pour info: class chaine { int lg; // longueur de la chaine char *zone; // zone contenant les caractères public: chaine(); // constructeur 1 chaine(char *tampon); // constructeur 2 chaine (const chaine &); // constructeur de recopie ~chaine(); // destructeur void affiche(); // affichage du contenu de la chaine chaine & operator = (const chaine &); // transmission par reference evite l'appel du constructeur de recopie chaine operator + (const chaine &); // transmission par reference evite l'appel du constructeur de recopie }; This post has been edited by capitaine-caverne: 24/08/2005 - 16:11:52 |
|
|
Lo-Fi Version |
Skin © Chapo
|