Probleme d'implementation operator= en C++

Probleme d'implementation operator= en C++ - C++ - Programmation

Marsh Posté le 07-08-2003 à 16:08:49    

Voila mon probleme :
 
J'ai deja eu à surcharger cet operator de
la facon suivante:
 
CObj & CObj::operator=(const CObj & o){
   a = o.a;
   b = o.b;
   ..
   etc...
 
   return *(this);
}
 
Ca c'est un classique, mais aujourd'hui
mon probleme c'est ke ma classe CObj derive d'une
classe CObjParent et ke la, je ne sais pas
comment ecrire ma surcharge pour ke le compilateur
me copie aussi les attributs de la classe mere (auxquels
j'ai pas acces, private oblige).
C'est encore plus tordu que le constructeur de copie.
 
Si quelqu'un voit une solution à ce probleme...
j'attends vos suggestions, merci
 

Reply

Marsh Posté le 07-08-2003 à 16:08:49   

Reply

Marsh Posté le 07-08-2003 à 16:39:55    

Je verrais bien un:

Code :
  1. CObj & CObj::operator=(const CObj & o)
  2. {
  3.    if(&o != this)
  4.    {
  5.       CObjParent::operator=(o);//J'ai un gros doute sur la syntaxe tout d'un coup
  6.       //reste
  7.    }
  8.    return *this;
  9. }


 
Un truc dans ce style. Bie nsur ça supose que la classe mère posséde son propre opérateur =


Message édité par LetoII le 07-08-2003 à 16:40:53
Reply

Marsh Posté le 07-08-2003 à 16:42:22    

LetoII a écrit :

Je verrais bien un:

Code :
  1. CObj & CObj::operator=(const CObj & o)
  2. {
  3.    if(&o != this)
  4.    {
  5.       CObjParent::operator=(o);//J'ai un gros doute sur la syntaxe tout d'un coup
  6.       //reste
  7.    }
  8.    return *this;
  9. }


 
Un truc dans ce style. Bie nsur ça supose que la classe mère posséde son propre opérateur =


 
je suis d'accord, mais dans mon cas elle en a pas, tu
penses que je suis bloqué ? fo faire autrement ?

Reply

Marsh Posté le 07-08-2003 à 16:44:59    

merry a écrit :


 
je suis d'accord, mais dans mon cas elle en a pas, tu
penses que je suis bloqué ? fo faire autrement ?
 


 
Y a un constructeur de recopie?

Reply

Marsh Posté le 07-08-2003 à 16:47:05    

ouai yen a un.
c koi ton idee ?

Reply

Marsh Posté le 07-08-2003 à 16:48:14    

merry a écrit :

ouai yen a un.
c koi ton idee ?
 


 
C très crade à mon gout mais tu doit pouvoir faire un new de placement sur le this en appelant le constructeur par recopie

Reply

Marsh Posté le 07-08-2003 à 16:50:12    

ouai moi aussi jtrouve pas ca tres clean comme
prog mais j'ai deja essayé quand meme.
Le probleme c'est (j'ai oublié de preciser ca)
c'est ke le constructeur de copie est declaré
en private et ke j'y ai pas directement acces,
j'ai seulement droit au constructeur par defaut.
sniff, sniff.

Reply

Marsh Posté le 07-08-2003 à 17:17:52    

une classe a toujours un opérateur= !
l'operator= ne s'hérite pas

Reply

Marsh Posté le 08-08-2003 à 09:01:23    

Code :
  1. CObj & CObj::operator=(const CObj & o)
  2.   {
  3.        if(&o != this)
  4.        {
  5.      
  6.             CObjParent *THIS = dynamic_cast<CObjParent *>(this);
  7.             *THIS = o;
  8.             //reste
  9.        }
  10.        return *this;
  11.   }


 
J'ai pas mieu à proposer (cete chaleur me détruit le cerveau :sweat: )

Reply

Marsh Posté le 08-08-2003 à 09:29:03    

pas la peine de faire un dynamic_cast. un static suffit. par contre, je comprends pas le problème à faire ça
 

Code :
  1. Base::operator=(other);

doit marcher dans tous les cas! ohé, ecoutez moi. toutes les classes C++ on un constructeur, destructeur, constructeur par recopie et operator=, que vous l'ecriviez ou pas!

Reply

Marsh Posté le 08-08-2003 à 09:29:03   

Reply

Marsh Posté le 08-08-2003 à 09:31:04    

Taz a écrit :

pas la peine de faire un dynamic_cast. un static suffit. par contre, je comprends pas le problème à faire ça
 

Code :
  1. Base::operator=(other);

doit marcher dans tous les cas! ohé, ecoutez moi. toutes les classes C++ on un constructeur, destructeur, constructeur par recopie et operator=, que vous l'ecriviez ou pas!


 
Tout à fait d'accord (après faut espérer que ça se passe bien avec l'operateur par défaut :D)
 
j'avais eu un petit doute sur le

Code :
  1. Base::operator=(other);

C pour ça que j'avais proposé une autre solution.

Reply

Marsh Posté le 08-08-2003 à 10:40:53    

ok, bein merci a tous, je vais
tester tout ca.
a+

Reply

Sujets relatifs:

Leave a Replay

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