Mitä yleiskustannuksia ja muita näkökohtia on käytettäessä strukturoitua luokkaa?

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

  • jos muistan C ++: n oikein struct ja class välillä ei ole eroa oletusnäkyvyyden lisäksi
  • otaksun struct -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.

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 structclass, 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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *