C en sistemas embebidos ha usado tradicionalmente estructuras para mantener datos estructurados.
Arduino trae C ++ a la tabla, por lo que podemos usar clases en su lugar.
Digamos que tenemos dos estructuras de datos diferentes que podrían considerarse muy similares:
typedef struct
{
int valueOne;
int valueTwo;
int valueThree;
} value_t;
y:
class Value
{
public:
int valueOne;
int valueTwo;
int valueThree;
}
En términos de memoria, ¿qué diferencia hará esto?
Todavía veo que la técnica de estructura se usa mucho, ¿por qué es esto?
programming
c++
struct
class
Cybergibbons
fuente
fuente
struct
yclass
además de la visibilidad predeterminadastruct
s se usan principalmente porque la gran mayoría del hardware embebido está codificado en C, por lo que cualquiera que pase mucho tiempo escribiendo código para MCU pequeñas probablemente conozca C mucho mejor que C ++, y automáticamente busca modismos C antes que modismos C ++. Es un problema de rendimiento del programador .Respuestas:
Según la respuesta aceptada de ¿ Cuándo debería usar una clase vs una estructura en C ++?
En cuanto a la memoria, el modificador de acceso no hace ninguna diferencia y, dadas las limitaciones de memoria del Arduino, es menos probable que las personas usen clases con jerarquías complejas, pero prefieren las estructuras POD de todos modos.
fuente
A diferencia de C, una instancia de a
struct
en C ++ es un objeto exactamente de la misma manera que una instancia de aclass
. Desde el punto de vista del código compilado, son idénticos. El uso de la memoria, la alineación, los tiempos de acceso, etc. son exactamente los mismos (es decir, no hay gastos generales).Desde el punto de vista del programador, hay una diferencia muy pequeña. Los miembros de a
struct
tienen visibilidad pública de forma predeterminada, mientras que los miembros de aclass
tienen visibilidad privada de forma predeterminada. De lo contrario, todas las características del lenguaje funcionan igual en ambos, como constructores / destructores, herencia, polimorfismo, plantillas y sobrecarga de operadores. Incluso puede derivar astruct
de aclass
, y viceversa.A pesar de la similitud, es bastante común ver personas que usan deliberadamente a
struct
en C ++ para estructuras muy simples, por ejemplo, donde solo consta de unos pocos miembros de datos, pero no funciones. Aclass
se usaría para cualquier cosa más compleja. Sin embargo, esto es puramente una cuestión de convención o preferencia personal, y puede usarse como una indicación sutil de la complejidad prevista de la estructura.fuente
Como han señalado otras respuestas, su rendimiento particular
struct
eclass
indistinguible es sabio (existen ligeras diferencias en los ámbitos de los nombres de tipo, debido a la forma en que definió su estructura). La delineación en C ++ no es entrestruct
yclass
, sino entre tipos que son POD (datos antiguos simples) y tipos que no lo son, como se explica en esta discusión .fuente
Ninguna. Las estructuras y las clases son lo mismo, difieren solo en los niveles de protección, y la creación de instancias crea un 'objeto'.
Menos escribir si no está tratando de ocultar miembros de datos.
fuente
Tenga en cuenta que
es obsoleto en C ++ y solo debes usar
No está muy claro en las respuestas, pero el otro efecto de las estructuras es la herencia pública por defecto frente a la herencia privada por defecto con las clases.
Como mencionan otros, el uso de struct es generalmente una convención para los tipos de POD.
También técnicamente 'struct vs object' debería ser 'struct vs class' (como instanciar una estructura o una clase todavía da un objeto).
fuente