A beágyazott rendszerekben a C hagyományosan struktúrákat használ strukturált adatok tárolására.
Az Arduino C ++ -t hoz a táblába, így osztályokat használhatunk ehelyett.
Mondjuk, hogy két különböző adatstruktúránk van, amelyek nagyon hasonlónak tekinthetők:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
és:
class Value { public: int valueOne; int valueTwo; int valueThree; }
Memória szempontjából mi lesz ez a különbség?
Még mindig látom, hogy a strukturálási technikát erősen használják – miért van ez?
Megjegyzések
Válasz
A (z) válasz elfogadott válaszától függően mikor kell osztályt vagy struktúrát használni a C ++ nyelven?
Az egyetlen különbség egy osztály és egy struktúra között a C ++ – ban az, hogy a struktúráknak alapértelmezett nyilvános tagjai vannak, a bázisoknak és osztályoknak pedig alapértelmezett privát tagjai és bázisai. Az osztályoknak és a struktúráknak egyaránt lehetnek nyilvános és privát tagjai, használhatják az öröklést és tagfunkcióik lehetnek.
Azt javasolnám, hogy a struktúrákat egyszerű-régi adatstruktúrákként használják osztályszerű tulajdonságok nélkül, és az osztályokat összesített adatstruktúrákként használjuk magánadatokkal és tagfunkciókkal. az emberek kevésbé használják az összetett hierarchiájú osztályokat, de a POD-struktúrákat mindenképp előnyben részesítik.
Válasz
A C-vel ellentétben egy példány egy struct
elem a C ++ -ban pontosan ugyanúgy objektum, mint egy class
. A lefordított kód szempontjából azonosak. A memóriahasználat, az igazítás, a hozzáférési idők stb. Pontosan megegyeznek (azaz nincsenek általános költségek).
A programozó szempontjából nagyon kicsi a különbség. div id = “83e94f536c”>
alapértelmezés szerint nyilvános láthatósággal rendelkezik, míg az class
tagok alapértelmezés szerint privát láthatósággal rendelkeznek. Ellenkező esetben az összes nyelvi szolgáltatás mindkettőn ugyanúgy működik, például a konstruktorok / destruktorok, az öröklés, a polimorfizmus, a sablonok és az operátorok túlterhelése. Még egy struct
-et is levezethet egy class
-ből és vice fordítva.
A hasonlóság ellenére meglehetősen gyakran előfordul, hogy az emberek szándékosan használnak egy struct
-t a C ++ nyelven nagyon egyszerű struktúrákhoz, pl. ahol csak néhány adattagból áll, de nincs funkciója. A class
minden összetettebb esetre használatos. Ez azonban pusztán konvenció vagy személyes preferencia kérdése, és felhasználható a szerkezet szándékolt összetettségének finom jelzésére.
Válasz
Amint arra más válaszok rámutattak, az Ön struct
és class
teljesítménye megkülönböztethetetlen (vannak kisebb eltérések a a típusnevek hatókörei, a struktúra meghatározásának módja miatt.) A C ++ nyelven történő elhatárolás nem struct
és class
között van, hanem a POD (egyszerű régi adatok) és az olyan típusok között, amelyek ebben a vitában kifejtettek.
Válasz
Memória szempontjából mi lesz ez a különbség?
Nincs. A struktúrák és az osztályok ugyanazok, csak a védelmi szintekben különböznek, és a példányosítás vagy létrehoz egy “objektumot”.
még mindig látja, hogy a strukturálási technikát erősen használják – miért van ez?
Kevesebb gépelés, ha ” nem próbálja elrejteni az adattagokat.
Válasz
Vegye figyelembe, hogy
typedef struct { ... } Foo;
a C ++ nyelven elavult, és csak a következőt kell használnia:
struct Foo { ... };
A válaszokban nem nagyon világos, de a struktúrák másik hatása alapértelmezés szerint nyilvános öröklés vs alapértelmezés szerint magánjellegű öröklés osztályokkal.
Amint azt mások is említették, a struct használata általában a POD típusokra vonatkozik.
Szintén technikailag a „struct vs object” kell legyen “struct vs class” (mivel a struct vagy egy osztály példányosítása még mindig ad objektumot).
Megjegyzések
- Szerkesztett kérdés object- > osztály.
struct
ésclass
között az alapértelmezett láthatóság mellett