C sur les systèmes embarqués utilise traditionnellement des structures pour contenir des données structurées.
Arduino apporte le C ++ à la table, nous pouvons donc utiliser des classes à la place.
Disons que nous avons deux structures de données différentes qui pourraient être considérées comme très similaires:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
et:
class Value { public: int valueOne; int valueTwo; int valueThree; }
En termes de mémoire, quelle différence cela fera-t-il?
Je vois toujours que la technique de struct est fortement utilisée – pourquoi est-ce?
Commentaires
Réponse
Daprès la réponse acceptée de Quand devriez-vous utiliser une classe par rapport à une structure en C ++?
La seule différence entre une classe et une structure en C ++ est que les structures ont des membres publics par défaut et les bases et les classes ont des membres et des bases privés par défaut. Les classes et les structures peuvent avoir un mélange de membres publics et privés, peuvent utiliser lhéritage et peuvent avoir des fonctions membres.
Je recommanderais dutiliser des structures comme des structures de données anciennes sans aucune fonctionnalité de classe, et en utilisant des classes comme structures de données agrégées avec des données privées et des fonctions membres.
En ce qui concerne la mémoire, le modificateur daccès ne fait aucune différence et étant donné les contraintes de mémoire de lArduino, les gens sont moins susceptibles dutiliser des classes avec des hiérarchies complexes, mais préfèrent quand même les structures POD.
Réponse
Contrairement à C, une instance dun struct
en C ++ est un objet exactement de la même manière quune instance dun class
. Du point de vue du code compilé, ils sont identiques. Lutilisation de la mémoire, lalignement, les temps daccès, etc. sont exactement les mêmes (cest-à-dire quil ny a pas de frais généraux).
Du point de vue du programmeur, il y a une très petite différence. Les membres dun struct
ont une visibilité publique par défaut, tandis que les membres dun class
ont une visibilité privée par défaut. Sinon, toutes les fonctionnalités linguistiques fonctionnent de la même manière sur les deux, tels que les constructeurs / destructeurs, lhéritage, le polymorphisme, les modèles et la surcharge dopérateurs. Vous pouvez même dériver un struct
à partir dun class
, et vice versa.
Malgré la similitude, il est assez courant de voir des gens utiliser délibérément un struct
en C ++ pour des structures très simples, par exemple où il ne se compose que de quelques membres de données, mais pas de fonctions. Un class
serait utilisé pour tout ce qui est plus complexe. Ceci est purement une question de convention ou de préférence personnelle cependant, et peut être utilisé comme une indication subtile de la complexité prévue de la structure.
Réponse
Comme dautres réponses lont souligné, vos performances struct
et class
ne se distinguent pas (il existe de légères différences dans les les portées des noms de type, en raison de la façon dont vous avez défini votre structure). La délimitation en C ++ nest pas entre struct
et class
, mais entre les types qui sont POD (données anciennes simples) et les types qui ne le sont pas, comme expliqué dans cette discussion .
Réponse
En termes de mémoire, quelle différence cela fera-t-il?
Aucun. Les structures et les classes sont la même chose, ne différant que par les niveaux de protection, et linstanciation crée un « objet ».
voit toujours la technique de struct étant fortement utilisée – pourquoi est-ce?
Moins de frappe si vous » nessayez pas de masquer les membres de données.
Réponse
Notez que
typedef struct { ... } Foo;
est obsolète en C ++ et vous devriez simplement utiliser
struct Foo { ... };
Ce nest pas très clair dans les réponses mais lautre effet des structures est héritage public par défaut vs héritage privé par défaut avec les classes.
Comme mentionné par dautres, lutilisation de struct est généralement une convention pour les types POD.
De plus, techniquement, « struct vs object » devrait être « struct vs class » (comme instancier un struct ou une classe donne toujours un objet).
Commentaires
- Objet de question modifié – > classe.
struct
etclass
en plus de la visibilité par défautstruct
sont principalement utilisés parce que la grande majorité du matériel embarqué est codée en C, donc quiconque passe beaucoup de temps à écrire du code pour de petits MCU connaît probablement beaucoup mieux le C que le C ++, et atteint automatiquement les idiomes C avant les idiomes C ++. Il ' est un problème de performances programmeur .