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
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.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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é)
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Bonjour,
Merci de toutes ces précisions. Je pourrais mourir moins bête ce soir.
A bientôt
Partager