C na integrovaných systémech tradičně používá struktury k uchovávání strukturovaných dat.
Arduino přináší do tabulky C ++, takže můžeme používat třídy místo toho.
Řekněme, že máme dvě různé datové struktury, které lze považovat za velmi podobné:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
a:
class Value { public: int valueOne; int valueTwo; int valueThree; }
Jaký bude rozdíl v paměti?
Stále vidím, že se technika struktury často používá – proč?
Komentáře
Odpověď
Převzato z přijaté odpovědi od Kdy byste měli použít třídu vs strukturu v C ++?
Jediný rozdíl mezi třídou a strukturou v C ++ spočívá v tom, že struktury mají výchozí veřejné členy a základny a třídy mají výchozí soukromé členy a základny. Obě třídy a struktury mohou mít směs veřejných a soukromých členů, mohou používat dědičnost a mohou mít členské funkce.
Doporučil bych použít struktury jako prosté staré datové struktury bez jakýchkoli funkcí ve třídě, a používání tříd jako agregovaných datových struktur se soukromými daty a členskými funkcemi.
Paměťově modifikátor přístupu nedělá žádný rozdíl a vzhledem k paměťovým omezením Arduina, lidé méně často používají třídy se složitými hierarchiemi, ale stejně preferují struktury POD.
Odpověď
Na rozdíl od C instance struct
v C ++ je objekt přesně stejným způsobem jako instance class
. Z pohledu kompilovaného kódu jsou identické. Využití paměti, zarovnání, doby přístupu atd. Jsou přesně stejné (tj. Nejsou zde žádné režijní náklady).
Z pohledu programátora je velmi malý rozdíl. Členové struct
mají ve výchozím nastavení veřejnou viditelnost, zatímco členové class
mají ve výchozím nastavení soukromou viditelnost. Jinak fungují všechny jazykové funkce u obou stejně, jako jsou konstruktory / destruktory, dědičnost, polymorfismus, šablony a přetížení operátorů. Můžete dokonce odvodit struct
z class
a vice naopak.
Navzdory podobnosti je zcela běžné vidět lidi záměrně používat struct
v C ++ pro velmi jednoduché struktury, např. kde se skládá pouze z několika datových členů, ale bez funkcí. A class
by bylo použito pro cokoli složitějšího. Toto je čistě záležitost konvence nebo osobních preferencí a lze ji použít jako jemné označení zamýšlené složitosti struktury.
Odpověď
Jak již zdůraznily další odpovědi, vaše konkrétní struct
a class
výkony jsou k nerozeznání (existují malé rozdíly v rozsahy názvů typů kvůli způsobu, jakým jste definovali svou strukturu). Vymezení v C ++ není mezi struct
a class
, ale mezi typy, které jsou POD (prostá stará data) a typy, které nejsou, jak je vysvětleno v této diskusi .
Odpověď
Jaký bude rozdíl v paměti?
Žádné. Struktury a třídy jsou stejné, liší se pouze v úrovních ochrany a instancí se vytvoří buď „objekt“.
stále vidíte, jak se strukturovaná technika často používá – proč?
Méně psaní, pokud “ nepokouším se skrýt datové členy.
Odpověď
Všimněte si, že
typedef struct { ... } Foo;
je v jazyce C ++ zastaralý a měli byste použít pouze
struct Foo { ... };
V odpovědích to není příliš jasné, ale další účinek struktur je veřejná dědičnost ve výchozím nastavení vs soukromá dědičnost ve výchozím nastavení s třídami.
Jak zmínili ostatní, použití struktury je obecně konvencí pro typy POD.
Také technicky by měl být „struct vs objekt“ „struct vs class“ (jako vytvoření instance struktury nebo třídy stále dává objekt).
Komentáře
- Upravený objekt otázky – > třída.
struct
aclass
kromě výchozí viditelnosti