C: ssä sulautetuissa järjestelmissä on perinteisesti käytetty rakenteita strukturoidun datan pitämiseen.
Arduino tuo C ++: n taulukkoon, jotta voimme käyttää luokkia sen sijaan.
Sanotaan, että meillä on kaksi erilaista tietorakennetta, joita voidaan pitää hyvin samankaltaisina:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
ja:
class Value { public: int valueOne; int valueTwo; int valueThree; }
Mitä eroa sillä on muistin suhteen?
Näen edelleen strukturointitekniikan käyttöä voimakkaasti – miksi näin on?
Kommentit
Vastaa
Otettuna hyväksytystä vastauksesta osoitteesta Milloin sinun tulisi käyttää luokkaa vs rakennetta C ++: ssa?
Ainoa ero luokan ja rakenteen välillä C ++: ssa on, että rakenteilla on oletusarvoiset julkiset jäsenet ja tukikohdilla ja luokilla oletusarvoiset yksityiset jäsenet ja tukiasemat. Sekä luokissa että rakenteissa voi olla sekoitus julkisia ja yksityisiä jäseniä, ne voivat käyttää perintöä ja niillä voi olla jäsenfunktioita.
Suosittelisin, että rakenteita käytetään tavallisten vanhojen tietorakenteiden muodossa ilman luokkamaisia ominaisuuksia, ja luokkien käyttäminen yhdistettyinä tietorakenteina, joissa on yksityisiä tietoja ja jäsenfunktioita.
Muistin suhteen käyttömuokkaajalla ei ole merkitystä ja Arduinon muistirajoitukset huomioon ottaen, ihmiset käyttävät vähemmän todennäköisesti luokkia, joilla on monimutkainen hierarkia, mutta mieluummin POD-rakenteet.
Vastaa
Toisin kuin C, ilmentymä struct
C ++: ssa on objekti täsmälleen samalla tavalla kuin class
. Käännetyn koodin näkökulmasta ne ovat identtisiä. Muistin käyttö, kohdistus, käyttöajat jne. Ovat täsmälleen samat (ts. Ei ole yleiskustannuksia).
Ohjelmoijan näkökulmasta ero on hyvin pieni. div id = ”83e94f536c”>
on oletusarvoisesti julkinen näkyvyys, kun taas class
-jäsenillä on oletusarvoisesti yksityinen näkyvyys. Muussa tapauksessa kaikki kieliominaisuudet toimivat samalla tavalla molemmissa, kuten rakentajat / destruktorit, perintö, polymorfismi, mallit ja operaattorin ylikuormitus. Voit jopa johtaa struct
class
: stä ja päinvastoin päinvastoin.
Yhtäläisyydestä huolimatta on melko yleistä nähdä ihmisten käyttävän tarkoituksella struct
C ++: ssa hyvin yksinkertaisissa rakenteissa, esim. jossa se koostuu vain muutamasta datajäsenestä, mutta ei toimintoja. A class
käytetään kaikkeen monimutkaisempaan. Tämä on kuitenkin puhtaasti sopimusten tai henkilökohtaisten mieltymysten kysymys, ja sitä voidaan käyttää hienovaraisena osoituksena rakenteen suunnitellusta monimutkaisuudesta.
Vastaus
Kuten muut vastaukset ovat huomauttaneet, tietyt struct
ja class
ovat erottumattomia suorituskyvyn suhteen ( tyypinimien laajuudet, strukturisi määrittelytavan vuoksi). C ++: n rajaus ei ole struct
– class
, mutta POD (tavalliset vanhat tiedot) -tyyppien ja sellaisten tyyppien välillä, jotka eivät ole, kuten tässä keskustelussa selitetään.
vastaus
Mitä eroa sillä muistin suhteen on?
Ei mitään. Rakenteet ja luokat ovat samat, ne eroavat toisistaan vain suojaustasoissa, ja instansointi joko luo ”objektin”.
strukturointitekniikkaa käytetään edelleen paljon – miksi näin on?
Vähemmän kirjoittamista, jos et yritä piilottaa tietojäseniä.
Vastaa
Huomaa, että
typedef struct { ... } Foo;
on vanhentunut C ++: ssa, ja sinun pitäisi vain käyttää
struct Foo { ... };
Se ei ole kovin selvä vastauksissa, mutta muuten rakenteiden vaikutus on julkinen perintö oletuksena vs yksityinen perintö oletusarvoisesti luokkien kanssa.
Kuten muut mainitsivat, struct on yleensä käytäntö POD-tyypeille.
Myös teknisesti ”struct vs object” tulisi olla ”struct vs luokka” (koska strukturan tai luokan instantisointi antaa edelleen objektin).
kommentit
- muokattu kysymysobjekti- > -luokka.
struct
jaclass
välillä ei ole eroa oletusnäkyvyyden lisäksistruct
-symboleita käytetään ensisijaisesti siksi, että suuri upotettujen laitteistojen koodi on C, joten kuka tahansa, joka viettää paljon aikaa koodin kirjoittamiseen pienille MCU: ille, todennäköisesti tuntee C: n paljon paremmin kuin C ++, ja tavoittaa automaattisesti C-idioomit ennen C ++ -diolleja. Se ' on ohjelmoijan suorituskykyongelma.