Küsimus:
Millised üldkulud ja muud kaalutlused on struktuuri vs klassi kasutamisel?
Cybergibbons
2014-03-07 18:29:32 UTC
view on stackexchange narkive permalink

Manustatud süsteemide C-s on struktureeritud andmete hoidmiseks traditsiooniliselt kasutatud struktuure.

Arduino toob tabelisse C ++, nii et saame selle asemel kasutada klasse.

Oletame, et meil on kaks erinevat andmestruktuurid, mida võib pidada väga sarnasteks:

  typedef struct {int valueOne; int väärtusKaks; int valueThree;} väärtus_t;  

ja:

  klass Väärtus {public: int valueOne; int väärtusKaks; int valueThree;}  

Mille poolest see mälu mõttes on?

Ma näen, et struktureerimistehnikat kasutatakse endiselt palju - miks see nii on?

kui ma oma C ++ õigesti meenutan, pole peale nähtavuse vaikimisi erinevust `struct` ja` class` vahel
Ma eeldaksin, et `struct'e kasutatakse peamiselt seetõttu, et ** suur ** osa manustatud riistvarast on kodeeritud C-sse, nii et igaüks, kes veedab palju aega väikeste MCU-de jaoks koodide kirjutamiseks, tunneb tõenäoliselt C-d palju paremini kui C ++ ja jõuab automaatselt C-ni C idioomide jaoks enne C ++ idioome. See on * programmeerija * jõudluse probleem.
Viis vastused:
#1
+16
ratchet freak
2014-03-07 20:41:46 UTC
view on stackexchange narkive permalink

Vastavalt vastuvõetud vastusele lehelt Millal peaksite C ++ -s kasutama klassi vs struktuuri?

Ainuke erinevus klassi ja struktuuri vahel C ++ -s on see, et struktuuridel on vaikimisi avalikud liikmed ning baasidel ja klassidel on vaikimisi privaatsed liikmed ja baasid. Nii klassides kui ka struktuurides võib olla segu avalikest ja eraõiguslikest liikmetest, nad saavad kasutada pärandit ja neil võivad olla liikme funktsioonid.

Soovitaksin kasutada struktuure tavaliste vanade andmestruktuuridena ilma klassitaoliste funktsioonideta, klasside kasutamine privaatsete andmete ja liikmete funktsioonidega andmeandmete koondstruktuuridena.

Mälu järgi pole juurdepääsu modifikaatoril mingit vahet ja Arduino mälupiirangutest lähtuvalt kasutavad inimesed vähem võimalusi klassidega keerukad hierarhiad, kuid eelistavad ikkagi POD-struktuure.

#2
+9
Peter Bloomfield
2014-03-07 20:53:46 UTC
view on stackexchange narkive permalink

Erinevalt C-st on C ++ -s olev struct -i eksemplar objekt täpselt samamoodi nagu class -i eksemplar. Koostatud koodi seisukohalt on need identsed. Mälukasutus, joondamine, juurdepääsuajad jms on täpselt samad (st üldkulusid pole).

Programmeerija seisukohast on erinevus väga väike. struct liikmetel on vaikimisi avalik nähtavus, samas kui klassi liikmetel on vaikimisi privaatne nähtavus. Vastasel juhul töötavad kõik keelefunktsioonid mõlemal ühesugused, näiteks konstruktorid / destruktorid, pärand, polümorfism, mallid ja operaatori ülekoormus. Võite isegi tuletada struct class -st ja vastupidi.

Vaatamata sarnasusele on üsna tavaline näha inimesi, kes kasutavad tahtlikult struct C ++ keeles väga lihtsate struktuuride jaoks, nt kus see koosneb ainult vähestest andmeliikmetest, kuid mitte funktsioone. klassi kasutataks kõige keerukama jaoks. See on siiski puhtalt kokkuleppe või isikliku eelistuse küsimus ja seda saab kasutada struktuuri kavandatud keerukuse peenetähisena.

#3
+4
microtherion
2014-03-07 21:29:42 UTC
view on stackexchange narkive permalink

Nagu teised vastused on välja toonud, on teie struct ja class jõudluse osas eristamatud (tüübinimede ulatuse osas on väikseid erinevusi määratlesite oma struktuuri). Piirang C ++ keeles ei ole struct ja class vahel, vaid tüüpide vahel, mis on POD (tavalised vanad andmed) ja tüüpide vahel, mis pole selgitatud selles arutelus.

#4
+3
Mud
2014-03-20 02:35:17 UTC
view on stackexchange narkive permalink

Millist erinevust see mälu osas teeb?

Puudub. Struktuurid ja klassid on sama asi, mis erineb ainult kaitsetasemete poolest ja eksponeerimine loob kas 'objekti'.

näete endiselt struktureeritud tehnika suurt kasutamist - miks see nii on?

Vähem tippida, kui te ei püüa andmeliikmeid peita

#5
+2
codah
2014-03-20 02:20:24 UTC
view on stackexchange narkive permalink

Pange tähele, et

  typedef struct {...} Foo;  

on C ++ keeles vananenud ja peaksite lihtsalt kasutama

  struct Foo {...};  

See pole vastustes eriti selge, kuid struktuuride teine ​​mõju on vaikimisi avalik pärimine vs vaikimisi klasside privaatne pärimine.

Nagu teised on maininud, on struktuuri kasutamine POD-tüüpide puhul tavaliselt kokkulepe.

Ka tehniliselt peaks 'struct vs object' olema 'struct vs class' (kui struktuuri või klassi eksponeerimine) annab ikka objekti).

Muudetud küsimuse objekt-> klass.


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...