Opérateurs et héritage - C++ - Programmation
Marsh Posté le 15-04-2003 à 08:53:00
l'operator= ne sh'erite pas, il est toujours synthétisé par défaut
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 ?
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 ?
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 ?
Marsh Posté le 15-04-2003 à 13:48:22
ça copie tout, mais ça fait tout sauf du memcpy. ça affecte chaque membre avec son opérateur d'affectation respectif
Marsh Posté le 15-04-2003 à 13:50:05
theShOcKwAvE a écrit : |
ne pas utiliser les fonctions memcpy/memset sur un objet (le pointeur sur vtable risque de ne pas aimer)
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 ==
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.
Marsh Posté le 15-04-2003 à 13:57:53
polo021 a écrit : la seule utiliste de surcharger 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.
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
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
Marsh Posté le 15-04-2003 à 14:01:32
chrisbk a écrit : |
genre c'est du C
Marsh Posté le 15-04-2003 à 14:02:00
chrisbk a écrit : |
Marsh Posté le 15-04-2003 à 14:02:10
ReplyMarsh Posté le 15-04-2003 à 14:03:20
chrisbk a écrit : |
ben si c'est un tableau, la recopie est triviale, sinon voir un conteneur STL ou utiliser std::copy
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
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 ?
Marsh Posté le 15-04-2003 à 14:18:07
merci bien
Marsh Posté le 15-04-2003 à 14:19:08
ReplyMarsh 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++ ...
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
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
Marsh Posté le 15-04-2003 à 14:35:24
++Taz a écrit : tableau != pointeur |
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
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 ?
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
Marsh Posté le 15-04-2003 à 14:41:00
deltaden a écrit : au fait, quand on définis |
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
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;
Marsh Posté le 15-04-2003 à 14:41:54
polo021 a écrit : |
oui
Marsh Posté le 15-04-2003 à 14:43:35
++Taz a écrit : 1) un tableau n'est pas une l-value |
je suis entierement d'accord
sizeof tableau == sizeof(Element)*n == ((tableau+n-1) - (tableau))/sizeof(element)
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