https://www.17buddies.rocks/index.html

17's Buddies Maps HL1 Maps HL2 Wads Plan des Maps
17 Buddies
Only for stats

Welcome Guest ( Log In | Register )

 
New
Need Help En C++, surcharge d'opérateur
capitaine-cavern...
post 24/08/2005 - 12:59:19 |   Post #1
+Reply

Group: Member
Posts: 1 605
Joined: 24/02/2005

fr 
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 ?
Post PM
Go to the top of the page
benneb
post 24/08/2005 - 13:05:46 |   Post #2
+Reply

Group: 17 Buddies
Posts: 13 317
Joined: 27/02/2004

fr 
Team:
nG


(IMG:http://forum.17buddies.rocks/style_emoticons/default/icon_oui.gif)

pose tes quesitons
Post PM
Go to the top of the page
capitaine-cavern...
post 24/08/2005 - 13:28:43 |   Post #3
+Reply

Group: Member
Posts: 1 605
Joined: 24/02/2005

fr 
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
Post PM
Go to the top of the page
Nosferatu
post 24/08/2005 - 14:29:14 |   Post #4
+Reply

Group: 17 Buddies
Posts: 5 245
Joined: 15/01/2004

fr 
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 &);
Post PM
Website
Go to the top of the page
capitaine-cavern...
post 24/08/2005 - 14:56:34 |   Post #5
+Reply

Group: Member
Posts: 1 605
Joined: 24/02/2005

fr 
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
Post PM
Go to the top of the page
2 User(s) are reading this topic (2 Guests and 0 Anonymous Users)
0 Members:

New
 


RSS Lo-Fi Version
 
Skin © Chapo