C em sistemas embarcados tradicionalmente usa estruturas para armazenar dados estruturados.
O Arduino traz C ++ para a tabela, para que possamos usar classes.
Digamos que temos duas estruturas de dados diferentes que podem ser consideradas muito semelhantes:
typedef struct
{
int valueOne;
int valueTwo;
int valueThree;
} value_t;
e:
class Value
{
public:
int valueOne;
int valueTwo;
int valueThree;
}
Em termos de memória, que diferença isso fará?
Eu ainda vejo a técnica struct sendo usada fortemente - por que isso?
programming
c++
struct
class
Cybergibbons
fonte
fonte
struct
eclass
além do padrão visibilidadestruct
s são usados principalmente porque a grande maioria do hardware incorporado é codificada em C; portanto, qualquer pessoa que gaste muito tempo escrevendo código para MCUs pequenos provavelmente conhece C muito melhor que C ++ e acessa automaticamente os idiomas C antes dos idiomas C ++. É um problema de desempenho do programador .Respostas:
Conforme extraído da resposta aceita em Quando você deve usar uma classe versus uma estrutura em C ++?
Em termos de memória, o modificador de acesso não faz diferença e, dadas as restrições de memória do Arduino, é menos provável que as pessoas usem classes com hierarquias complexas, mas preferem as estruturas de POD de qualquer maneira.
fonte
Diferentemente de C, uma instância de a
struct
em C ++ é um objeto exatamente da mesma maneira que uma instância de aclass
. Do ponto de vista do código compilado, eles são idênticos. O uso da memória, alinhamento, tempos de acesso etc. são exatamente os mesmos (ou seja, não há custos indiretos).Do ponto de vista do programador, há uma diferença muito pequena. Os membros de um
struct
têm visibilidade pública por padrão, enquanto os membros de umclass
têm visibilidade privada por padrão. Caso contrário, todos os recursos de linguagem funcionam da mesma maneira em ambos, como construtores / destruidores, herança, polimorfismo, modelos e sobrecarga de operador. Você pode até derivar astruct
de aclass
e vice-versa.Apesar da semelhança, é bastante comum ver pessoas usando deliberadamente um
struct
C ++ em estruturas muito simples, por exemplo, onde ele consiste apenas de alguns membros de dados, mas sem funções. Aclass
seria usado para algo mais complexo. Porém, isso é apenas uma questão de convenção ou preferência pessoal e pode ser usado como uma indicação sutil da complexidade pretendida da estrutura.fonte
Como outras respostas apontaram, seu desempenho particular
struct
eclass
é indistinguível em termos de desempenho (existem pequenas diferenças nos escopos dos nomes dos tipos, devido à maneira como você definiu sua estrutura). O delineamento em C ++ não é entrestruct
eclass
, mas entre tipos que são POD (dados antigos simples) e tipos que não são, conforme explicado nesta discussão .fonte
Nenhum. Estruturas e classes são a mesma coisa, diferindo apenas nos níveis de proteção, e a instanciação cria um 'objeto'.
Menos digitação se você não estiver tentando ocultar membros de dados.
fonte
Observe que
está obsoleto em C ++ e você deve apenas usar
Não está muito claro nas respostas, mas o outro efeito das estruturas é a herança pública por padrão versus herança privada por padrão com as classes.
Conforme mencionado por outros, o uso de struct geralmente é uma convenção para os tipos de POD.
Tecnicamente também 'struct vs object' deve ser 'struct vs class' (como instanciar uma struct ou uma classe ainda fornece um objeto).
fonte