C w systemach osadzonych tradycyjnie używa struktur do przechowywania danych strukturalnych.
Arduino wprowadza C ++ do tabeli, więc możemy używać klas zamiast tego.
Powiedzmy, że mamy dwie różne struktury danych, które można uznać za bardzo podobne:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
i:
class Value { public: int valueOne; int valueTwo; int valueThree; }
Jeśli chodzi o pamięć, jaka będzie to różnica?
Nadal widzę, że technika struct jest intensywnie używana – dlaczego tak jest?
Komentarze
Odpowiedź
Na podstawie zaakceptowanej odpowiedzi z Kiedy należy używać klasy, a kiedy struktury w C ++?
Jedyną różnicą między klasą a strukturą w C ++ jest to, że struktury mają domyślne publiczne składowe i bazy, a klasy mają domyślne prywatne składowe i bazy. Zarówno klasy, jak i struktury mogą mieć mieszankę publicznych i prywatnych elementów członkowskich, mogą używać dziedziczenia i mogą mieć funkcje składowe.
Polecam używanie struktur jako zwykłych starych struktur danych bez żadnych cech klasowych, i używanie klas jako zagregowanych struktur danych z prywatnymi danymi i funkcjami składowymi.
Jeśli chodzi o pamięć, modyfikator dostępu nie robi różnicy i biorąc pod uwagę ograniczenia pamięci Arduino, ludzie rzadziej używają klas ze złożonymi hierarchiami, ale i tak wolą struktury POD.
Odpowiedź
W przeciwieństwie do C, instancja struct
w C ++ jest obiektem dokładnie w taki sam sposób, jak instancja class
. Z punktu widzenia skompilowanego kodu są identyczne. Użycie pamięci, wyrównanie, czasy dostępu itp. Są dokładnie takie same (tj. Nie ma narzutów).
Z punktu widzenia programisty jest bardzo niewielka różnica. Składowe struct
mają domyślnie widoczność publiczną, podczas gdy członkowie class
mają domyślnie widoczność prywatną. W przeciwnym razie wszystkie funkcje językowe działają tak samo na obu, takie jak konstruktory / destruktory, dziedziczenie, polimorfizm, szablony i przeciążanie operatorów. Możesz nawet wyprowadzić struct
z class
i vice versa.
Pomimo podobieństwa dość często zdarza się, że ludzie celowo używają struct
w C ++ do bardzo prostych struktur, np. gdzie składa się tylko z kilku elementów danych, ale bez funkcji. Element class
zostałby użyty do czegoś bardziej złożonego. Jest to jednak kwestia wyłącznie konwencji lub osobistych preferencji i może być użyte jako subtelne wskazanie zamierzonej złożoności struktury.
Odpowiedź
Jak wskazywały inne odpowiedzi, Twoje konkretne struct
i class
są nie do odróżnienia pod względem wydajności (istnieją niewielkie różnice w zakresy nazw typów, ze względu na sposób, w jaki zdefiniowałeś swoją strukturę. między typami, które są POD (zwykłe stare dane) i typami, które nimi nie są, jak wyjaśniono w tej dyskusji .
Odpowiedź
Jeśli chodzi o pamięć, co to za różnica?
Brak. Struktury i klasy to to samo, różniące się tylko poziomami ochrony, a utworzenie instancji tworzy „obiekt”.
nadal często widzisz, że technika struct jest często używana – dlaczego tak jest?
Mniej pisania, jeśli „ nie próbujesz ukrywać członków danych.
Odpowiedź
Pamiętaj, że
typedef struct { ... } Foo;
jest przestarzały w C ++ i powinieneś po prostu użyć
struct Foo { ... };
Odpowiedzi nie są zbyt jasne, ale innym efektem struktur jest domyślne dziedziczenie publiczne vs domyślne dziedziczenie prywatne z klasami.
Jak wspominali inni, używanie struktury jest generalnie konwencją dla typów POD.
Z technicznego punktu widzenia „struktura vs obiekt” powinno być „struct vs class” (ponieważ tworzenie instancji struktury lub klasy nadal daje obiekt).
Komentarze
- Edytowany obiekt pytania – > klasa.
struct
aclass
poza domyślną widocznościąstruct
są używane głównie dlatego, że ogromna większość wbudowanego sprzętu jest kodowana w C, więc każdy, kto spędza dużo czasu na pisaniu kodu dla małych MCU, prawdopodobnie zna C znacznie lepiej niż C ++, i automatycznie sięga po idiomy C przed idiomami C ++. Jest to ' problem z wydajnością programisty .