operateur = besoin d'aide pour le comprendre

operateur = besoin d'aide pour le comprendre - C++ - Programmation

Marsh Posté le 25-10-2004 à 16:22:48    

:hello:  
J'ai besoin de pouvoir faire une affectation implicite d'un type objet vers un type int  
ex : entier = objet;
 
Si je surdefinis l'operateur suivant :  
int Cl_objet::operator = (const Cl_objet & objet)
 
La ca marche seulement si je fais de l'affectation multiple ex :
entier = objet = objet;
 
Si j'en definis un indépendament de ma class le compilo me met "must be a <unknow> member"
 
Si quelqu'un peut me venir en aide et me dire pourquoi ca ne fonctionne pas.
 
D'avance un grand merci

Reply

Marsh Posté le 25-10-2004 à 16:22:48   

Reply

Marsh Posté le 25-10-2004 à 16:29:15    

je suis pas sur, mais je crois qu'il faut plutot redefinir un operateur de convertion implicite
 
dans ton cas pour le type int
 

Code :
  1. class Cl_objet
  2. {
  3. ...
  4. operator int() const
  5. {
  6. ...
  7. }
  8. };


 
 
edit : definir, pas redefinir  :ange:


Message édité par cris56 le 25-10-2004 à 16:34:13
Reply

Marsh Posté le 25-10-2004 à 16:30:51    

je t'aime toi!
c'est pas con je test de suite!

Reply

Marsh Posté le 25-10-2004 à 16:31:45    

en attendant que je test si quelqu'un a une autre idée ... sait-on jamais!

Reply

Marsh Posté le 25-10-2004 à 16:39:09    

cris56  
as tu un example d'un operateur int ou autre type pour moi voir exactement car la j'ai un doute sur un truc :ange:

Reply

Marsh Posté le 25-10-2004 à 16:49:51    

edit : j'ai rien dit
edit : en gros tu retourne un int koi, tu bloque sur quoi ?


Message édité par cris56 le 25-10-2004 à 16:55:52
Reply

Marsh Posté le 25-10-2004 à 17:03:04    

Merci cris ca marche!
Mais pour ce ki est de l'appel explicite c'est quoi dans le cadre d'un operateur int  
ex : operateur =
objet = objet;
objet.operator = (objet);
 
mais pour l'operateur int?
int = objet;
???


Message édité par C H A V E Z le 25-10-2004 à 17:05:45
Reply

Marsh Posté le 25-10-2004 à 17:07:36    

ma question c 'est implicitement dans quels cas le compilo va faire appel a lui et comment ?

Reply

Marsh Posté le 25-10-2004 à 17:10:08    

static_cast<int>(o);
ou bien int(o);

Reply

Marsh Posté le 25-10-2004 à 17:11:30    

Reply

Marsh Posté le 25-10-2004 à 17:11:30   

Reply

Marsh Posté le 25-10-2004 à 17:12:29    

c'est imlicite, il sera appeler si besoin et si il est defini
 
mais comme ca fais un de truc plus de caché aux yeux du programmeur, c'est assez peu aprecié il me semble

Reply

Marsh Posté le 25-10-2004 à 17:14:02    

si la converstion est sure et bien définie, y a pas trop de problème.
 
par contre si comme la STL de MS, tu fais fais
string::operator const char *() const
 
qui à le même comportement que c_str() ... là tu va dans le mur

Reply

Marsh Posté le 25-10-2004 à 17:17:23    

Taz a écrit :

static_cast<int>(o);
ou bien int(o);


 
excuse taz mais je ne te suis pas la...
tu peux reexpliqué   :??:

Reply

Marsh Posté le 25-10-2004 à 17:17:28    

Taz a écrit :


par contre si comme la STL de MS, tu fais fais
string::operator const char *() const
 
qui à le même comportement que c_str() ... là tu va dans le mur


 
oui, voila un exemple à eviter


Message édité par cris56 le 25-10-2004 à 17:18:06
Reply

Marsh Posté le 25-10-2004 à 18:49:26    

depuis que j'ai mis l'operateur int j'ai un conflit entre mon operateur int et un constructeur Cl_objet (int) pour les operations d'additions ex:
objet = objet1 + entier;
 
il n'en veux pas sauf si je mets ca :
objet = int(objet1) + entier;
    ou
objet = objet1 + objet(entier);


Message édité par C H A V E Z le 25-10-2004 à 18:51:10
Reply

Marsh Posté le 25-10-2004 à 18:50:04    

le probleme c est que je voudrais arrivé a pouvoir faire  
objet = objet1 + entier;
sans pour autant transtypé

Reply

Marsh Posté le 25-10-2004 à 19:04:16    

dois je absolument surdefinr mon operateur +?

Reply

Marsh Posté le 25-10-2004 à 19:10:49    

c'est préférable...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 25-10-2004 à 19:11:20    

non. je sais pas ce que tu branles ... va voir le lien que j'ai filé et t'as pas besoin d'opérateur de conversion

Reply

Marsh Posté le 26-10-2004 à 14:44:34    

autre question :
si je veux surdefinir les operateurs de comparaison ==, !=, > , < ,>=, <= dois je absolument les surdefinir tous?
 
ou alors == , >, < sont suffisent?


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 14:47:28    

ce sont des operateurs distincts

Reply

Marsh Posté le 26-10-2004 à 15:06:57    

donc je suis obligé!  
arf merde...
merci cris


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 15:41:22    

Reply

Marsh Posté le 26-10-2004 à 17:02:41    

merci taz mais tu le redefinis quand meme  

Code :
  1. template<typename T>
  2. struct NotEqual
  3. {
  4.   bool operator!=(const T &rhs) const
  5.   {
  6.     return not (static_cast<const T&>(*this) == rhs);
  7.   }
  8. };


 
edit : j'ai rien dis


Message édité par C H A V E Z le 26-10-2004 à 17:10:19

---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:04:12    

j'abandonne ...

Reply

Marsh Posté le 26-10-2004 à 17:04:23    

ca definie un model pour plus avoir à le faire

Reply

Marsh Posté le 26-10-2004 à 17:05:20    

y a personne qui sait lire ? y en a pas un pour cliquer sur le lien, première ligne du topic ?

Reply

Marsh Posté le 26-10-2004 à 17:05:45    

http://membres.lycos.fr/sexyteam/az/smiley/kaio.gif


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:07:22    

ça me fait pas marrer, ce topic est sans doute l'un des meilleurs que j'ai fait ...

Reply

Marsh Posté le 26-10-2004 à 17:09:33    

je ne dis pas qu'il est nul au contraire mais ca fait un bout de temps que je n'ai plus fais du C++ il faut me laissé le temps de me souvenir de tout ;)


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:11:46    

pour les cout y a t il moyen d'avoir un format ?
ex si je veux afficher 000001-245-131-46
et non 1-245-131-46


Message édité par C H A V E Z le 26-10-2004 à 17:11:57

---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:15:53    

C H A V E Z a écrit :

je ne dis pas qu'il est nul au contraire mais ca fait un bout de temps que je n'ai plus fais du C++ il faut me laissé le temps de me souvenir de tout ;)

mais t'as rien à te souvenir du tout, t'as juste à utiliser :o
 
cout : oui. Trouve toi de la doc

Reply

Marsh Posté le 26-10-2004 à 17:19:44    

merci pour l'info ;)


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:20:33    

ps : je prefere mettre quelque chose que je comprends completement pas toi !?


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:22:16    

C H A V E Z a écrit :

pour les cout y a t il moyen d'avoir un format ?


Oui. http://juicystudio.com/tutorial/cpp/io.asp

Reply

Marsh Posté le 26-10-2004 à 17:22:59    

c'est pourquoi ça que je fais des topics pour boolay. Sauf que t'es dans la catégorie des illétrés ... je peux rien y faire.
 
J'aurais même pas besoin de dire ça si tu l'avais lu.

Reply

Marsh Posté le 26-10-2004 à 17:29:24    

Lam's MERCI ca m'a fait gagné du temps!


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:30:00    

taz
et pourtant je l'ai lu :p


Message édité par C H A V E Z le 26-10-2004 à 17:32:47

---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 26-10-2004 à 17:33:04    

mon œil. Y a tout dans le topic : quoi utiliser et une explication sur comment ça marche pour se décomplexer. Bon je me barre, je peux rien pour toi. Vouloir c'est pouvoir. Toi tu veux pas.

Reply

Marsh Posté le 27-10-2004 à 18:35:08    

Taz ca marche au poil, j'ai recherché ce que je ne comprenais pas et la ca tourne impec! Merci


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed