C op embedded systemen gebruikt traditioneel structs om gestructureerde gegevens vast te houden.
Arduino brengt C ++ naar de tabel, zodat we klassen kunnen gebruiken in plaats daarvan.
Laten we zeggen dat we twee verschillende datastructuren hebben die als zeer vergelijkbaar kunnen worden beschouwd:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
en:
class Value { public: int valueOne; int valueTwo; int valueThree; }
In termen van geheugen, wat maakt dit uit?
Ik zie nog steeds dat de struct-techniek intensief wordt gebruikt – waarom is dit?
Opmerkingen
Antwoord
Zoals overgenomen uit het geaccepteerde antwoord van Wanneer moet je een klasse versus een struct in C ++ gebruiken?
Het enige verschil tussen een klasse en een struct in C ++ is dat structs standaard openbare leden hebben en bases en klassen standaard privéleden en bases. Zowel klassen als structs kunnen een combinatie van publieke en private leden hebben, kunnen overerving gebruiken en kunnen lidfuncties hebben.
Ik zou aanraden om structs te gebruiken als gewoon-oude-datastructuren zonder enige klasse-achtige functies, en klassen gebruiken als geaggregeerde datastructuren met privégegevens en lidfuncties.
Geheugengewijs maakt de toegangsmodificator geen verschil en gezien de geheugenbeperkingen van de Arduino, mensen gebruiken minder vaak klassen met complexe hiërarchieën, maar geven toch de voorkeur aan de POD-structuren.
Answer
In tegenstelling tot C, een instantie van een struct
in C ++ is een object op precies dezelfde manier als een instantie van een class
. Vanuit het oogpunt van de gecompileerde code zijn ze identiek. Geheugengebruik, uitlijning, toegangstijden enz. Zijn exact hetzelfde (dwz er zijn geen overheadkosten).
Vanuit het oogpunt van de programmeur is er een heel klein verschil. Leden van een struct
hebben standaard openbare zichtbaarheid, terwijl leden van een class
standaard privé-zichtbaarheid hebben. Anders werken alle taalfuncties op beide hetzelfde, zoals constructors / destructors, overerving, polymorfisme, sjablonen en overbelasting van operators. U kunt zelfs een struct
afleiden uit een class
, en vice versa.
Ondanks de gelijkenis is het vrij normaal dat mensen opzettelijk een struct
gebruiken in C ++ voor zeer eenvoudige structuren, bijv. waar het slechts uit een paar gegevensleden bestaat, maar geen functies. Een class
zou worden gebruikt voor alles wat complexer is. Dit is echter puur een kwestie van afspraak of persoonlijke voorkeur, en kan worden gebruikt als een subtiele indicatie van de beoogde complexiteit van de structuur.
Answer
Zoals andere antwoorden hebben aangegeven, zijn uw specifieke struct
en class
qua prestaties niet te onderscheiden (er zijn kleine verschillen in de bereiken van de typenamen, vanwege de manier waarop u uw structuur heeft gedefinieerd). De afbakening in C ++ is niet tussen struct
en class
, maar tussen typen die POD (gewone oude gegevens) zijn en typen die dat niet zijn, zoals uitgelegd in deze discussie .
Answer
Wat maakt dit uit in termen van geheugen?
Geen. Structuren en klassen zijn hetzelfde, verschillen alleen in beschermingsniveaus, en het instantiëren van beide creëert een “object”.
zie nog steeds dat de struct-techniek intensief wordt gebruikt – waarom is dit?
Minder typen als je ” probeer niet om gegevensleden te verbergen.
Antwoord
Merk op dat
typedef struct { ... } Foo;
is verouderd in C ++ en je zou gewoon
struct Foo { ... };
moeten gebruiken. Het is niet erg duidelijk in de antwoorden, maar het andere effect van structs is standaard openbare overerving versus standaard privé-overerving met klassen.
Zoals door anderen is vermeld, is het gebruik van struct over het algemeen een conventie voor POD-typen.
Ook technisch gezien zou “struct vs object” moeten zijn “struct vs class” (aangezien het instantiëren van een struct of een class nog steeds een object oplevert).
Opmerkingen
- Bewerkt vraagobject- > class.
struct
enclass
naast de standaard zichtbaarheidstruct
s worden voornamelijk gebruikt omdat de grote meerderheid van embedded hardware is gecodeerd in C, dus iedereen die veel tijd besteedt aan het schrijven van code voor kleine MCUs kent C waarschijnlijk veel beter dan C ++, en bereikt automatisch C-idiomen vóór C ++-idiomen. Het ' is een programmeur prestatieprobleem.