Bonjour,
une simple question concernant les structures.
J'aurais voulu savoir si il y avait possibilité d'effectuer des surcharges d'opérateurs sur les structures.... (et si oui, comment ?)
merci du renseignement
Version imprimable
Bonjour,
une simple question concernant les structures.
J'aurais voulu savoir si il y avait possibilité d'effectuer des surcharges d'opérateurs sur les structures.... (et si oui, comment ?)
merci du renseignement
Comme struct X {/*...*/}; <=> class X {public: /*...*/};
Oui, tu peux.
Bonjour,
C'était pour avoir une petite précision. Le instance de structures ne sont pas stockés dans la pile alors que les instances de classes sont stockés dans le tas.
C'est juste pour avoir une confirmation je peux me tromper.
Merci
A bientôt
Salut,
Il existe quelques langages pour lesquels il y a des différences conceptuelles entre les classes et les structures, mais le C++ n'apparait pas dans la liste.
Par exemple, il me semble que, en C#, une classe sera transmise en tant que référence alors qu'une structure le sera en tant que valeur.
En C++, la seule différence qui existe entre une classe et une structure, c'est l'accessibilité par défaut (comprend: en dehors de toute précision concernant l''accessibilité) des membres, méthodes et héritage: pour une structure, l'accessibiltié par défaut sera publique alors qu'elle sera privée pour une classe.
Hormis ce point particulier, il n'y a strictement aucune différence entre une classe et une structure, ni en ce qui concerne la représentation de la classe ou de la structure en mémoire, ni en ce qui concerne le "type de mémoire" utilisé (pile, tas, ou ...)Code:
1
2
3
4
5
6
7
8
9
10 struct MyStruct { /* si on ne met rien, les membres sont publics */ Type mbre1; }; class MyClass { /* si on n'indique pas le contraire, les membres sont privés */ Type mbre1; };
Le fait qu'une instance sera placée sur la pile ou sur le tas dépendra uniquement du recours (ou du non recours) à l'allocation dynamique de la mémoire (utilisation de new ou new[], et du delete ou delete[] associé)
Un exemple :
(oui je retourne une copie, mais l'objet est petit... oui je n'ai pas défini de constructeur... bref on pourrait faire bien des remarques, mais concentre toi simplement sur le fait qu'une structure est une classe, et vice versa. Cf le post de David.)Code:
1
2
3
4
5
6 struct S { int a; }; S operator+ (const S& s1, const S& s2) { S res; res.a = s1.a + s2.a; return res; }
Et une structure est vraiment une classe. Sauf qu'on a gardé en partie une compatibilité avec le C... De sorte à ce que du C puisse compiler. Mais l'on s'est dit que autant à garder struct, on pouvait lui donner les mêmes "features" qu'aux classes, seulement en C pour une structure tout est public par défaut, la notion de privé n'existe pas tellement, donc on a gardé cette idée là en C++.
L'héritage pour les structures est public par défaut (si tu fais struct S2 : S1, S2 hérite publiquement de S1), et les attributs/fonctions membres d'une structure sont publics par défaut également.
Le stockage est le même.
Bonjour,
Merci de toutes ces précisions. Je pourrais mourir moins bête ce soir.:D
A bientôt