Milyen általános költségek és egyéb szempontok vannak a struktúra vagy az osztály használata esetén?

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

  • ha jól emlékszem a C ++ -omra nincs különbség struct és class között az alapértelmezett láthatóság mellett
  • feltételezem, hogy fájlokat elsősorban azért használják, mert a beágyazott hardverek nagy többsége C-ben van kódolva, így aki sok időt tölt kis MCU-k kódjának írásával, valószínűleg sokkal jobban ismeri a C-t, mint a C ++, és automatikusan eléri a C idiómákat a C ++ idiómák előtt. ' programozó teljesítményprobléma.

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük