Kysymys:
Mitä yleiskustannuksia ja muita näkökohtia on käytettäessä strukturoitua luokkaa?
Cybergibbons
2014-03-07 18:29:32 UTC
view on stackexchange narkive permalink

C sulautetuissa järjestelmissä on perinteisesti käyttänyt rakenteita strukturoidun datan säilyttämiseen.

Arduino tuo C ++: n taulukkoon, joten voimme käyttää luokkia sen sijaan.

Sanotaan, että meillä on kaksi erilaista tietorakenteet, joita voidaan pitää hyvin samankaltaisina:

  typedef struct {int valueOne; int-arvoKaksi; int valueThree;} value_t;  

ja:

  class Arvo {public: int valueOne; int-arvoKaksi; int valueThree;}  

Mitä eroa sillä on muistin suhteen?

Näen edelleen strukturointitekniikkaa voimakkaasti - miksi näin on?

jos muistan C ++: n oikein, `strukturin` ja` luokan 'välillä ei ole eroa oletusnäkyvyyden lisäksi
Oletan, että `struct`: ita käytetään pääasiassa siksi, että ** suuri ** osa upotetusta laitteistosta on koodattu C: hen, joten kuka tahansa, joka viettää paljon aikaa koodin kirjoittamiseen pienille MCU: ille, todennäköisesti tuntee C: n paljon paremmin kuin C ++, ja saavuttaa automaattisesti C-idioomeille ennen C ++ -diolleja. Se on * ohjelmoijan * suorituskykyongelma.
Viisi vastused:
#1
+16
ratchet freak
2014-03-07 20:41:46 UTC
view on stackexchange narkive permalink

Otettu 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ä rakennetta käytetään tavallisten vanhojen tietorakenteiden muodossa ilman luokan kaltaisia ​​ominaisuuksia, ja luokkien käyttäminen yhdistettyinä tietorakenteina, joissa on yksityisiä tietoja ja jäsenfunktioita.

Muistin mukaan pääsynmuokkaajalla ei ole merkitystä ja Arduinon muistirajoitteet huomioon ottaen ihmiset käyttävät vähemmän todennäköisesti luokkia monimutkaisia ​​hierarkioita, mutta mieluummin POD-rakenteet joka tapauksessa.

#2
+9
Peter Bloomfield
2014-03-07 20:53:46 UTC
view on stackexchange narkive permalink

Toisin kuin C, C ++: n struct -esiintymä on objekti täsmälleen samalla tavalla kuin class -esiintymä. 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. struct -jäsenillä on oletusarvoisesti julkinen näkyvyys, kun taas luokan jäsenillä on oletusarvoisesti yksityinen näkyvyys. Muuten kaikki kieliominaisuudet toimivat samalla tavalla molemmissa, kuten rakentajat / tuhoajat, perintö, polymorfismi, mallit ja käyttäjän ylikuormitus. Voit jopa johtaa struct class -kohdasta ja päinvastoin.

Samankaltaisuudesta huolimatta on melko yleistä nähdä ihmisten käyttävän tarkoituksella struct C ++: ssa hyvin yksinkertaisille rakenteille, esim jossa se koostuu vain muutamasta datajäsenestä, mutta ei toimintoja. class -merkkiä käytetään kaikkeen monimutkaisempaan. Tämä on kuitenkin puhtaasti sopimuksen tai henkilökohtaisen mieltymyksen kysymys, ja sitä voidaan käyttää hienovaraisena osoituksena rakenteen suunnitellusta monimutkaisuudesta.

#3
+4
microtherion
2014-03-07 21:29:42 UTC
view on stackexchange narkive permalink

Kuten muut vastaukset ovat huomauttaneet, tietyt struct ja class eivät ole erotettavissa toisistaan ​​suorituskyvyn suhteen (tyyppinimien laajuudessa on pieniä eroja tapojen takia määritit strukturisi). C ++: n rajaus ei ole struct ja class välillä, vaan tyyppien välillä, jotka ovat POD (tavalliset vanhat tiedot) ja sellaisten tyyppien välillä, jotka eivät ole, kuten selitetty tässä keskustelussa.

#4
+3
Mud
2014-03-20 02:35:17 UTC
view on stackexchange narkive permalink

Mitä eroa sillä on muistin suhteen?

Ei mitään. Rakenteet ja luokat ovat sama asia, ne eroavat toisistaan ​​vain suojaustasojen suhteen, ja instantiointi joko luo 'objektin'.

näette silti, että rakennustekniikkaa käytetään paljon - miksi näin on?

Vähemmän kirjoittamista, jos et yritä piilottaa tietojäseniä.

#5
+2
codah
2014-03-20 02:20:24 UTC
view on stackexchange narkive permalink

Huomaa, että

  typedef struct {...} Foo;  

on vanhentunut C ++: ssa ja sinun pitäisi vain käyttää

  struct Foo {...};  

Vastauksissa ei ole kovin selvää, mutta rakenteiden toinen vaikutus on oletusarvoisesti julkinen perintö vs. oletusarvoisesti yksityinen perintö luokkien kanssa.

Kuten muut ovat maininneet, structin käyttö on yleisesti POD-tyyppien käytäntöä.

Myös teknisesti 'struct vs object' tulee olla 'struct vs class' (strukturin tai luokan instantisoimiseksi) antaa edelleen objektin).

Muokattu kysymys objekti-> luokka.


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...