C på innebygde systemer har tradisjonelt brukt strukturer for å holde strukturerte data.
Arduino bringer C ++ til bordet, slik at vi kan bruke klasser i stedet.
La oss si at vi har to forskjellige datastrukturer som kan betraktes som veldig like:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
og:
class Value { public: int valueOne; int valueTwo; int valueThree; }
Når det gjelder minne, hvilken forskjell vil dette utgjøre?
Jeg ser fortsatt at strukturteknikken brukes tungt – hvorfor er dette?
Kommentarer
Svar
Som hentet fra det aksepterte svaret fra Når skal du bruke en klasse mot en struktur i C ++?
Den eneste forskjellen mellom en klasse og en struktur i C ++ er at strukturer har standard offentlige medlemmer og baser og klasser har standard private medlemmer og baser. Både klasser og strukturer kan ha en blanding av offentlige og private medlemmer, kan bruke arv og kan ha medlemsfunksjoner.
Jeg vil anbefale å bruke strukturer som vanlig gamle datastrukturer uten noen klasselignende funksjoner, og bruke klasser som aggregerte datastrukturer med private data og medlemsfunksjoner.
Minnemessig gjør tilgangsmodifikatoren ingen forskjell og gitt minnebegrensningene til Arduino, folk bruker mindre klasser med komplekse hierarkier, men foretrekker POD-strukturer uansett.
Svar
I motsetning til C, en forekomst av en struct
i C ++ er et objekt på nøyaktig samme måte som en forekomst av en class
. Fra synspunktet til den kompilerte koden er de identiske. Minnebruk, justering, tilgangstider osv. Er nøyaktig den samme (dvs. det er ingen overhead).
Fra programmererens synspunkt er det en veldig liten forskjell. Medlemmer av en struct
har offentlig synlighet som standard, mens medlemmer av class
har privat synlighet som standard. Ellers fungerer alle språkfunksjonene likt på begge, slik som konstruktører / destruktorer, arv, polymorfisme, maler og operatøroverbelastning. Du kan til og med utlede en struct
fra en class
, og vice versa.
Til tross for likheten, er det ganske vanlig å se folk bevisst bruke en struct
i C ++ for veldig enkle strukturer, f.eks. der den bare består av noen få data-medlemmer, men ingen funksjoner. En class
vil bli brukt til noe mer komplisert. Dette er bare et spørsmål om konvensjon eller personlig preferanse, og kan brukes som en subtil indikasjon på strukturen som er ment kompleksiteten.
Svar
Som andre svar har påpekt, er din spesifikke struct
og class
umulig å skille mellom ytelse (Det er små forskjeller i omfanget av typenavnene, på grunn av måten du definerte strukturen din på. Avgrensningen i C ++ er ikke mellom struct
og class
mellom typer som er POD (vanlig gamle data) og typer som ikke er, som forklart i denne diskusjonen .
Svar
Når det gjelder minne, hvilken forskjell vil dette utgjøre?
Ingen. Strenger og klasser er det samme, de skiller seg bare i beskyttelsesnivåer, og instantiering skaper enten et «objekt».
ser fremdeles strukturteknikken som brukes tungt – hvorfor er dette?
Mindre å skrive hvis du » prøver ikke å skjule datamedlemmer.
Svar
Merk at
typedef struct { ... } Foo;
er foreldet i C ++, og du bør bare bruke
struct Foo { ... };
Det er ikke veldig klart i svarene, men den andre effekten av strukturer er offentlig arv som standard vs privat arv som standard med klasser.
Som nevnt av andre, er bruk av struct generelt en konvensjon for POD-typer.
Også teknisk bør «struct vs object» være «struct vs class» (som å instantiere en struct eller en klasse fremdeles gir et objekt).
Kommentarer
- Redigert spørsmålsobjekt- > klasse.
struct
ogclass
i tillegg til standardsynlighetenstruct
brukes primært fordi det store flertallet av innebygd maskinvare er kodet i C, så alle som bruker mye tid på å skrive kode for små MCUer, kjenner nok C mye bedre enn C ++, og når automatisk etter C-uttrykk før C ++ -betegnelser. Det ' sa programmerer ytelsesproblem.