Ce cheltuieli generale și alte considerații există atunci când se utilizează o structură comparativ cu o clasă?

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

  • dacă îmi amintesc corect C ++ nu există nicio diferență între struct și class în afară de vizibilitatea implicită
  • Aș presupune s sunt utilizate în primul rând deoarece marea majoritate a hardware-ului încorporat este codat în C, astfel încât oricine petrece mult timp scriind cod pentru MCU-uri mici știe probabil C mult mai bine decât C ++, și ajunge automat la expresiile C înainte de expresiile C ++. Este ' o problemă de performanță programator .

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ă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *