Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

operateur = sur une struct

9 réponses
Avatar
Guillaume Gourdin
Bonjour, est-ce que l'operateur = sur une struct appelle l'operateur = sur
chacune des variables membre de la struct ou bien est-ce qu'un brutal memcpy
est effectué ?

9 réponses

Avatar
Christophe Bourez
La première solution

"Guillaume Gourdin" wrote in message
news:bdrj7r$1ktv$
Bonjour, est-ce que l'operateur = sur une struct appelle l'operateur = sur
chacune des variables membre de la struct ou bien est-ce qu'un brutal
memcpy

est effectué ?




Avatar
Le Bren Alexis
"Guillaume Gourdin" a écrit dans le message de
news:bdrj7r$1ktv$
Bonjour, est-ce que l'operateur = sur une struct appelle l'operateur = sur
chacune des variables membre de la struct ou bien est-ce qu'un brutal
memcpy

est effectué ?




Salut,

Ca appelle bien l'operateur = sur chacun des membres, mais il faut faire
attention aux pointeurs car si tu as un pointeur de structure dans ta
structure, le fait de faire = fera que des deux structures pointeront vers
la meme donnée membre (de type pointeur). Par contre , pas de problèmes pour
les données de type int, char etc...

Avatar
Fonzy
"Guillaume Gourdin" a écrit dans le message de news:
bdrj7r$1ktv$
Bonjour, est-ce que l'operateur = sur une struct appelle l'operateur = sur
chacune des variables membre de la struct ou bien est-ce qu'un brutal
memcpy

est effectué ?

Par défaut, c'est bien une assignation membre à membre qui est réalisée. Par

contre, le problème se pose si les données membres peuvent avoir des tailles
variables ie ne prennent pas la même étendue dans la mémoire: tableaux
dynamiques, pointeurs sur objets (dont l'un aurait subi un dynamic cast et
pas l'autre), etc. Dans ce dernier cas, il faut que tu surcharges
l'opérateur = pour bien préciser le traitement que tu attends, sous peine
d'avoir une erreur en run-time. Pour un tableau dynamique en donnée membre
par exemple, il faudra faire un coup de delete[] puis un coup de new ...[]
avec la taille de l'opérande.

Fonzy

Avatar
Fabien LE LEZ
On Tue, 1 Jul 2003 22:34:23 +0200, "Fonzy" wrote:

Par
contre, le problème se pose si les données membres peuvent avoir des tailles
variables ie ne prennent pas la même étendue dans la mémoire: tableaux
dynamiques,


Pas de problème : vector, list et autres ont déjà un operateur = qui
fait le boulot correctement.


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Martinez Jerome
Guillaume Gourdin wrote:

Bonjour, est-ce que l'operateur = sur une struct appelle l'operateur = sur
chacune des variables membre de la struct ou bien est-ce qu'un brutal memcpy
est effectué ?


Question a la con (mais vous commencez a avoir l'habitude :) ) : quelle
est l'utilisté d'un struct en C++? je pensais que c'etait une reliquat
du C, et que maintenant il fallait utilisé les classes.
Un struct et une classe sans actions possibles, en programmation objet
sans interet donc.
J'ai faux?

Avatar
Arnaud Meurgues
Martinez Jerome wrote:

Question a la con (mais vous commencez a avoir l'habitude :) ) : quelle
est l'utilisté d'un struct en C++? je pensais que c'etait une reliquat
du C, et que maintenant il fallait utilisé les classes.
Un struct et une classe sans actions possibles, en programmation objet
sans interet donc.
J'ai faux?


Oui. Une struct et une classe, c'est exactement la même chose. La seule
différence est l'accès par défaut (private pour les classes et public
pour les structs).

Par ailleurs, même en C++, il peut arriver de n'avoir besoin d'aucun
comportement et de pouvoir/vouloir se contenter d'un struct. La
programmation objet n'est pas un but en soi, mais un moyen. Si l'on a
besoin de données sans comportement, pourquoi ne pas utiliser un struct.

En tout cas, une struct n'est pas une classe sans action possible. Il
est parfaitement légal d'écrire :
struct S {
S() : value_(0) {}
void action() { value_++; }
private;
int value_;
};

par exemple.

Arnaud

Avatar
Fabien LE LEZ
On Wed, 02 Jul 2003 10:22:17 +0200, Martinez Jerome
wrote:

quelle est l'utilisté d'un struct en C++?


Si par "struct", tu entends ce qu'on déclare par le mot-clef "struct",
il s'agit d'une classe dont les membres et l'héritage sont publics par
défaut.
Si tu parles de structure (comme on en voit en C), ça n'existe
effectivement pas en C++ -- sinon comme cas particulier de classe.


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:


| Si tu parles de structure (comme on en voit en C), ça n'existe
| effectivement pas en C++ -- sinon comme cas particulier de classe.

9/4

A /structure/ is a class defined with the class-key struct; its
members and the base classes (clause 10) are public by default
(clause 11).

C'est une définition que j'ai toujours trouvée sans grand intérêt.

-- Gaby
Avatar
Loïc Joly
Christophe de Vienne wrote:
struct peut très bien avoir des méthodes. La seule différence avec class est
que les attributs et méthodes d'une structure sont par défaut en 'public',
alors que ceux d'une classe en 'private'...


Ainsi que l'héritage par défaut...

--
Loïc