C sur les systèmes embarqués utilise traditionnellement des structures pour contenir des données structurées.
Arduino apporte 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 largement utilisée - pourquoi est-ce?
programming
c++
struct
class
Cybergibbons
la source
la source
struct
et enclass
plus de la visibilité par défautstruct
s sont utilisés principalement parce que la grande majorité du matériel embarqué est codé en C, donc toute personne qui passe beaucoup de temps à écrire du code pour les petits MCU connaît probablement mieux C que C ++, et atteint automatiquement les idiomes C avant les idiomes C ++. C'est un problème de performances du programmeur .Réponses:
Comme tiré de la réponse acceptée de Quand devriez-vous utiliser une classe vs une structure en C ++?
En ce qui concerne la mémoire, le modificateur d'accès ne fait aucune différence et étant donné les contraintes de mémoire de l'Arduino, les gens sont moins susceptibles d'utiliser des classes avec des hiérarchies complexes, mais préfèrent quand même les structures POD.
la source
Contrairement à C, une instance de a
struct
en C ++ est un objet exactement de la même manière qu'une instance de aclass
. Du point de vue du code compilé, ils sont identiques. L'utilisation de la mémoire, l'alignement, les temps d'accès, etc. sont exactement les mêmes (c'est-à-dire qu'il n'y a pas de surcharge).Du point de vue du programmeur, il y a une différence très mineure. Les membres d'un
struct
ont une visibilité publique par défaut, tandis que les membres d'unclass
ont une visibilité privée par défaut. Sinon, toutes les fonctionnalités du langage fonctionnent de la même manière sur les deux, telles que les constructeurs / destructeurs, l'héritage, le polymorphisme, les modèles et la surcharge des opérateurs. Vous pouvez même dériver unstruct
de aclass
, et vice versa.Malgré la similitude, il est assez fréquent de voir des gens utiliser délibérément un
struct
en C ++ pour des structures très simples, par exemple lorsqu'il ne se compose que de quelques membres de données, mais pas de fonctions. Unclass
serait utilisé pour quelque chose de plus complexe. Ceci est purement une question de convention ou de préférence personnelle, et peut être utilisé comme une indication subtile de la complexité prévue de la structure.la source
Comme d'autres réponses l'ont souligné, vos performances sont particulières
struct
etclass
indiscernables (il existe de légères différences dans les étendues des noms de type, en raison de la façon dont vous avez défini votre structure). La délimitation en C ++ n'est pas entrestruct
etclass
, mais entre les types qui sont POD (données anciennes simples) et les types qui ne le sont pas, comme expliqué dans cette discussion .la source
Aucun. Les structures et les classes sont la même chose, ne diffèrent que par les niveaux de protection et l'instanciation crée un «objet».
Moins de saisie si vous n'essayez pas de masquer les membres de données.
la source
Notez que
est obsolète en C ++ et vous devez simplement utiliser
Ce n'est pas très clair dans les réponses mais l'autre effet des structures est l'héritage public par défaut vs l'héritage privé par défaut avec les classes.
Comme mentionné par d'autres, l'utilisation de struct est généralement une convention pour les types POD.
Techniquement, «struct vs object» devrait également être «struct vs class» (car l'instanciation d'un struct ou d'une classe donne toujours un objet).
la source