C w systemach wbudowanych tradycyjnie używa struktur do przechowywania danych strukturalnych.
Arduino wprowadza C ++ do tabeli, więc zamiast tego możemy używać klas.
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ęć, co to za różnica?
Nadal widzę, że technika strukturalna jest często używana - dlaczego?
programming
c++
struct
class
Cybergibbons
źródło
źródło
struct
iclass
poza niąstruct
s wykorzystywane są głównie dlatego, że wielki większość osadzonych sprzętu jest kodowana w C, więc każdy, kto spędza dużo czasu pisania kodu dla małych mikrokontrolerów zapewne wie C znacznie lepiej niż C ++, i automatycznie sięga idiomów C przed C ++ idiomów. Jest to problem z wydajnością programisty .Odpowiedzi:
Jak zaczerpnięto z zaakceptowanej odpowiedzi z Kiedy używać klasy w porównaniu do struktury w C ++?
Jeśli chodzi o pamięć, modyfikator dostępu nie ma znaczenia, a biorąc pod uwagę ograniczenia pamięci Arduino, ludzie rzadziej korzystają z klas o złożonej hierarchii, ale i tak wolą struktury POD.
źródło
W przeciwieństwie do C, instancja
struct
w C ++ jest obiektem dokładnie tak samo, jak instancja aclass
. Z punktu widzenia skompilowanego kodu są one identyczne. Zużycie pamięci, wyrównanie, czasy dostępu itp. Są dokładnie takie same (tj. Nie ma narzutów).Z punktu widzenia programisty różnica jest niewielka. Członkowie
struct
mają domyślnie widoczność publiczną, natomiast członkowieclass
mają domyślnie widoczność prywatną. W przeciwnym razie wszystkie funkcje języka działają tak samo na obu, takie jak konstruktory / destruktory, dziedziczenie, polimorfizm, szablony i przeciążanie operatora. Możesz nawet wyprowadzićstruct
z aclass
i vice versa.Pomimo podobieństwa dość często ludzie celowo używają
struct
w C ++ bardzo prostych struktur, np. Gdy składa się tylko z kilku elementów danych, ale nie ma żadnych funkcji.class
Będą wykorzystywane do bardziej skomplikowanych. Jest to jednak kwestia konwencji lub osobistych preferencji i może być używana jako subtelne wskazanie zamierzonej złożoności konstrukcji.źródło
Jak wskazały inne odpowiedzi, twój konkretny
struct
iclass
są nierozróżnialne pod względem wydajności (istnieją niewielkie różnice w zakresie nazw typów, ze względu na sposób zdefiniowania struktury). Opis w C ++ nie jest pomiędzystruct
iclass
, ale między typami, które są POD (zwykłe stare dane) i typami, które nie są, jak wyjaśniono w tej dyskusji .źródło
Żaden. Struktury i klasy są tym samym, różnią się tylko poziomami ochrony, a tworzenie ich instancji tworzy „obiekt”.
Mniej pisania, jeśli nie próbujesz ukryć członków danych.
źródło
Zauważ, że
jest przestarzałe w C ++ i powinieneś po prostu użyć
Nie jest to zbyt jasne w odpowiedziach, ale drugim efektem struktur jest domyślnie dziedziczenie publiczne w porównaniu do dziedziczenia prywatnego z klasami.
Jak wspomnieli inni, użycie struct jest ogólnie konwencją dla typów POD.
Również technicznie „struct vs object” powinien być „struct vs class” (ponieważ tworzenie instancji struct lub klasa nadal daje obiekt).
źródło