C pe sistemele încorporate folosește în mod tradițional structuri pentru a păstra date structurate.
Arduino aduce C ++ la masă, deci putem folosi clase în schimb.
Să spunem că avem două structuri de date diferite care ar putea fi considerate foarte asemănătoare:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
și:
class Value { public: int valueOne; int valueTwo; int valueThree; }
În ceea ce privește memoria, ce diferență va face acest lucru?
Încă văd că tehnica struct este folosită intens – de ce este asta?
Comentarii
Răspuns
După cum este preluat din răspunsul acceptat de la Când ar trebui să utilizați o clasă comparativ cu o structură în C ++?
Singura diferență între o clasă și o structură în C ++ este că structurile au membri publici impliciti, iar bazele și clasele au membri și baze private implicite. Atât clasele, cât și structurile pot avea un amestec de membri publici și privați, pot folosi moștenirea și pot avea funcții de membru.
Aș recomanda utilizarea structurilor ca structuri de date simple-vechi fără caracteristici de tip clasă, și folosind clase ca structuri de date agregate cu date private și funcții de membru.
În ceea ce privește memoria, modificatorul de acces nu face nicio diferență și având în vedere constrângerile de memorie ale Arduino, este mai puțin probabil ca oamenii să folosească clase cu ierarhii complexe, dar oricum preferă structurile POD.
Răspuns
Spre deosebire de C, o instanță a unui struct
în C ++ este un obiect exact în același mod ca o instanță a unui class
. Din punctul de vedere al codului compilat, acestea sunt identice. Utilizarea memoriei, alinierea, orele de acces etc. sunt exact aceleași (adică nu există cheltuieli generale).
Din punctul de vedere al programatorului, există o diferență foarte mică. Membrii unui struct
au vizibilitate publică în mod implicit, în timp ce membrii unui class
au vizibilitate privată în mod implicit. În caz contrar, toate caracteristicile lingvistice funcționează la fel pe ambele, cum ar fi constructorii / destructorii, moștenirea, polimorfismul, șabloanele și supraîncărcarea operatorului. Puteți chiar obține un struct
dintr-un class
și vice versa.
În ciuda similitudinii, este destul de obișnuit să vezi oameni folosind în mod deliberat un struct
în C ++ pentru structuri foarte simple, de ex. unde este format doar din câțiva membri de date, dar fără funcții. Un class
ar fi folosit pentru orice lucru mai complex. Aceasta este pur și simplu o chestiune de convenție sau preferință personală și poate fi utilizată ca o indicație subtilă a complexității intenționate a structurii.
Răspuns
Așa cum au subliniat alte răspunsuri, struct
și class
sunt performanțe care nu se disting (există mici diferențe în scopurile numelor de tip, datorită modului în care ați definit structura). Delimitarea în C ++ nu este între struct
și class
, dar între tipurile care sunt POD (date vechi simple) și tipurile care nu sunt, așa cum se explică în această discuție .
Răspuns
În ceea ce privește memoria, ce diferență va face asta?
Niciunul. Structurile și clasele sunt același lucru, diferă doar în ceea ce privește nivelurile de protecție, iar instanțierea fie creează un „obiect”.
vedeți în continuare tehnica struct utilizată intens – de ce este asta?
Mai puțin tastați dacă ” nu încercați să ascundeți membrii datelor.
Răspundeți
Rețineți că
typedef struct { ... } Foo;
este învechit în C ++ și ar trebui să utilizați doar
struct Foo { ... };
Nu este foarte clar în răspunsuri, dar celălalt efect al structurilor este moștenirea publică în mod implicit vs moștenirea privată în mod implicit cu clase.
După cum s-a menționat de alții, utilizarea struct este, în general, o convenție pentru tipurile de POD.
„struct vs class” (deoarece instanțierea unei structuri sau a unei clase dă totuși un obiect).
Comentarii
- Editat obiect întrebare- > clasă.
struct
șiclass
în afară de vizibilitatea implicită