Opérateurs et héritage

Opérateurs et héritage - C++ - Programmation

Marsh Posté le 15-04-2003 à 04:50:08    

salut,
 
si j'ai une classe A dans laquelle je définis l'opérateur "=",
et que j'ai une classe fille B; l'opérateur "=" est toujours bien définis sur mes objets B ? C'est juste pour être certain...
 
Et au fait, si j'ai une autre classe fille de A, qui elle redéfinit l'opérateur "=" autrement, ca va marcher correctement?, ou je dois déclarer operator= comme virtual dans A, comme pour les méthodes "normales" ?
 
Merci


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 15-04-2003 à 04:50:08   

Reply

Marsh Posté le 15-04-2003 à 08:53:00    

l'operator= ne sh'erite pas, il est toujours synthétisé par défaut

Reply

Marsh Posté le 15-04-2003 à 13:33:54    

ha ok, donc si j'ai une classe purement virtuelle, ca ne sert à rien d'y redéfinir des opérateurs? Il faut le faire dans chaque sous-classe ?


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 15-04-2003 à 13:41:18    

j'ai dit juste opretor=

Reply

Marsh Posté le 15-04-2003 à 13:42:19    

ha ok, j'ai eu peur...
Et il est synthétisé par défaut comme faisant quoi ?


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 15-04-2003 à 13:43:55    

affectation membre-à-membre

Reply

Marsh Posté le 15-04-2003 à 13:47:13    

++Taz a écrit :

affectation membre-à-membre


 
J'en profite pour poser une question ...
 
Ca copie parties privée + publique + protected ? C'est bien ca ?
 
Ca revient à faire un memcpy de l'objet, non ?

Reply

Marsh Posté le 15-04-2003 à 13:48:22    

:non: ça copie tout, mais ça fait tout sauf du memcpy. ça affecte chaque membre avec son opérateur d'affectation respectif

Reply

Marsh Posté le 15-04-2003 à 13:50:05    

theShOcKwAvE a écrit :


 
J'en profite pour poser une question ...
 
Ca copie parties privée + publique + protected ? C'est bien ca ?
 
Ca revient à faire un memcpy de l'objet, non ?


 
ne pas utiliser les fonctions memcpy/memset sur un objet (le pointeur sur vtable risque de ne pas aimer)

Reply

Marsh Posté le 15-04-2003 à 13:55:04    

la seule utiliste de surcharger l'operateur =,
c'est pour les pointeurs non? sinon il copie l'adresse et pas le contenu. C'est bien ca? Ou alors je confonds avec l'operateur ==

Reply

Marsh Posté le 15-04-2003 à 13:55:04   

Reply

Marsh Posté le 15-04-2003 à 13:57:00    

de toutes façons, mem*, c'est du C. ça dégage à moins de savoir exactement ce qu'on fait et de ne pouvoir faire autrement.

Reply

Marsh Posté le 15-04-2003 à 13:57:53    

polo021 a écrit :

la seule utiliste de surcharger l'operateur =,
c'est pour les pointeurs non? sinon il copie l'adresse et pas le contenu. C'est bien ca? Ou alors je confonds avec l'operateur ==

non, c'est bien plus que ça. dupliqué un objet peut impliquer beaucoup plus de choses que copier des membres et des plages de données.

Reply

Marsh Posté le 15-04-2003 à 13:59:17    

++Taz a écrit :

non, c'est bien plus que ça. dupliqué un objet peut impliquer beaucoup plus de choses que copier des membres et des plages de données.


si tu le dis

Reply

Marsh Posté le 15-04-2003 à 14:00:58    

++Taz a écrit :

de toutes façons, mem*, c'est du C. ça dégage à moins de savoir exactement ce qu'on fait et de ne pouvoir faire autrement.


 
bah pour copier des tableaux d'entier/float/truc du genre, c quand meme achement pratique [:spamafote]

Reply

Marsh Posté le 15-04-2003 à 14:01:09    

je sens du mépris là

Reply

Marsh Posté le 15-04-2003 à 14:01:32    

chrisbk a écrit :


 
bah pour copier des tableaux d'entier/float/truc du genre, c quand meme achement pratique [:spamafote]

genre c'est du C

Reply

Marsh Posté le 15-04-2003 à 14:02:00    

chrisbk a écrit :


bah pour copier des tableaux d'entier/float/truc du genre, c quand meme achement pratique [:spamafote]


 
[:nraynaud]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 15-04-2003 à 14:02:10    

++Taz a écrit :

genre c'est du C


 
genre quelle serait la version ++Taz compliant ?

Reply

Marsh Posté le 15-04-2003 à 14:02:21    

Reply

Marsh Posté le 15-04-2003 à 14:03:20    

chrisbk a écrit :


 
genre quelle serait la version ++Taz compliant ?

ben si c'est un tableau, la recopie est triviale, sinon voir un conteneur STL ou utiliser std::copy

Reply

Marsh Posté le 15-04-2003 à 14:08:02    

j'attire votre attention sur std::copy qui remplace bien mieux tous  les trucs du C
 
http://www.sgi.com/tech/stl/copy.html

Reply

Marsh Posté le 15-04-2003 à 14:14:43    

d'ailleurs, si on fait une affectation d'un tableau, ca fait bien une affectation de tous les éléments individuellement ?


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 15-04-2003 à 14:15:33    

oui

Reply

Marsh Posté le 15-04-2003 à 14:18:07    

merci bien


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 15-04-2003 à 14:19:08    


hein?
C'est quoi cette histoire? vous parlez d'un tableau comment la?

Reply

Marsh Posté le 15-04-2003 à 14:21:23    

ben un tableau genre MonObjet tableau[100]

Reply

Marsh Posté le 15-04-2003 à 14:24:12    

++Taz a écrit :

de toutes façons, mem*, c'est du C. ça dégage à moins de savoir exactement ce qu'on fait et de ne pouvoir faire autrement.


 
okok ... C'était juste pour avoir une idée du comportement ... C'est sur que je n'utilise pas trop souvent de memcpy en C++ ...
 


---------------
last.fm
Reply

Marsh Posté le 15-04-2003 à 14:27:08    

et tu fais bien. en C++, on a des objets, et pas des 01. dans tous les cas on remplace memset pas std::fill et memcpy par std::copy

Reply

Marsh Posté le 15-04-2003 à 14:30:01    

++Taz a écrit :

ben un tableau genre MonObjet tableau[100]


venant de ta part ca m'etonne un peu. J'ai ratter un truc.
Mais il me semble qu'un tableau c'est une adresse?
 
int tab1[10];
int tab2[10];
tab2 = tab1;
 
ca fait pas un copie membre a membre mais juste que tab2 pointe sur tab1  
 
 :??:

Reply

Marsh Posté le 15-04-2003 à 14:31:11    

tableau != pointeur    [:tomtom75]

Reply

Marsh Posté le 15-04-2003 à 14:35:24    

++Taz a écrit :

tableau != pointeur    [:tomtom75]  


nan mais serieux un tableau c'est betement une adresse sur une zone memoire contigue, stout.
On peut acceder a l'element x par *(tab1+x) tab1 etant l'adresse du premier element du tableau , donc de la zone memoire.
 
Mais bon  :wahoo:

Reply

Marsh Posté le 15-04-2003 à 14:36:38    

toi t'as rien compris du tout

Reply

Marsh Posté le 15-04-2003 à 14:38:12    

au fait, quand on définis
test tab[10];
il remplit le tableau grâce au constructeur par défaut, c'est ca ?
 
et d'ailleurs, tant que j'y suis, si on ne redéfinis pas l'opérateur "==", il effectue la comparaison sur chaque variable d'instance? Et si oui, == sur des tableaux, ca fait quoi ? ca compare élément par élément (si même taille je suppose?)
Et == sur des pointeurs ca vérifie juste que c'est les mêmes adresses ?


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 15-04-2003 à 14:39:37    

++Taz a écrit :

toi t'as rien compris du tout


[:ruisseau de larmes]

Reply

Marsh Posté le 15-04-2003 à 14:40:32    

== pareil memebre à membre. mais comme pour les structures, == ne fonctionne pour les tableaux. il faut donc comparer à la main

Reply

Marsh Posté le 15-04-2003 à 14:41:00    

deltaden a écrit :

au fait, quand on définis
test tab[10];
il remplit le tableau grâce au constructeur par défaut, c'est ca ?
 
et d'ailleurs, tant que j'y suis, si on ne redéfinis pas l'opérateur "==", il effectue la comparaison sur chaque variable d'instance? Et si oui, == sur des tableaux, ca fait quoi ? ca compare élément par élément (si même taille je suppose?)
Et == sur des pointeurs ca vérifie juste que c'est les mêmes adresses ?


ben operateur== sur des pointeurs ca compare les adresses qu'ils contiennent et pas l'element sur lesquels ils pointent.
C'est juste ++Taz? :??:
Je crois que j'ai le don de mal m'expliquer.
Je laisse tomber


Message édité par polo021 le 15-04-2003 à 14:42:14
Reply

Marsh Posté le 15-04-2003 à 14:41:41    

1) un tableau n'est pas une l-value
2)tableau[n];
sizeof tableau == sizeof(Element)*n;

Reply

Marsh Posté le 15-04-2003 à 14:41:54    

polo021 a écrit :


ben operateur== sur des pointeurs ca compare les adresses qu'ils contiennent et pas l'element sur lesquels ils pointent.
C'est juste ++Taz? :??:  

oui

Reply

Marsh Posté le 15-04-2003 à 14:43:35    

++Taz a écrit :

1) un tableau n'est pas une l-value
2)tableau[n];
sizeof tableau == sizeof(Element)*n;


 
je suis entierement d'accord
sizeof tableau == sizeof(Element)*n == ((tableau+n-1) - (tableau))/sizeof(element)


Message édité par polo021 le 15-04-2003 à 14:45:06
Reply

Marsh Posté le 15-04-2003 à 14:44:39    

pourtant ça avait aps l'air d'etre clair

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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