Kysymys siitä, käytetäänkö luokkaa vai rakennetta, on yleinen C++-ohjelmoijien keskuudessa koodia suunniteltaessa. Nuorimpien kehittäjien joukossa on pilvi väärinkäsityksiä luokan ja rakenteen erosta teknisesti. Vaikka kehittäjät ymmärtävätkin erot, he ovat joskus eri mieltä sopivammasta koodista.
.NET:ssä on yleensä kaksi tyyppiä: class, joka on viitetyyppi ja struct on arvotyyppi. Viitetyyppi elää pääasiassa kasassa, kun taas arvotyyppi elää rivissä. Useita muita eroja voidaan selvittää tällä artikkelilla.
Luokka vs rakenne
Suurin ero luokan ja rakenteen välillä on se, että luokka on viitetyyppi, joka on varattu kasaan sekä roskien keräämiseen. Toisaalta rakenne on arvotyyppi, joka on allokoitu joko rivissä tai pinossa sisältäviin tyyppeihin.
C++:ssa oleva luokka on melko samanlainen kuin C-rakenne. Se koostuu datajäsenluettelosta ja luokassa yleensä suoritettavista operaatioista. Voidaan sanoa, että olio-ohjelmoinnissa luokka on rakennuspalikka. Luokka on myös samanlainen kuin objektin suunnitelma.
Rakenne on arvotyypin tietotyyppi. Se auttaa saamaan yhden muuttujan sisältämään usean tyyppisiä linkitettyjä tietoja. Rakennetta luotaessa käytetään avainsanaa "struct". Kun struct-objekti luodaan uudella operaattorilla, kutsutaan sopiva konstruktori ja se luodaan.
Luokan ja rakenteen vertailutaulukko
Vertailuparametrit | Luokka | Rakenne |
---|---|---|
Oletusnäkyvyys | Yksityinen | Julkinen |
Koko tyhjänä | 1 tavu | 0 tavua |
Jäsenmuuttujien alustus | Sallii | Ei salli |
Roskakokoelma | Mahdollista, koska se käyttää passia viittauksella | Ei mahdollista, koska se käyttää ohitusarvoa |
Uudelleenkäytettävyys | Täysin | Ei |
Mikä on luokka?
C++-ohjelmoinnissa luokka on tietorakenne tai käyttäjän määrittelemä tyyppi, jonka jäseninä on toimintoja ja dataa. Oletuskäyttöoikeus on yksityinen C++-luokan jäsenille. Yksityiset jäsenet eivät pääse käsiksi luokan ulkopuolelle, ja heihin pääsee vain luokkamenetelmien kautta. Periytyminen on sallittua luokassa, koska sen funktiot voivat periä sen alaluokat
Luokkatietotyyppiinstanssit tunnetaan objekteina. Se voi sisältää jäsenfunktioita, ylikuormitettuja operaattoreita ja ohjelmoijan määrittämiä muuttujavakioita. Luokkamallien avulla voidaan luoda luokkailmoitus. Nämä luokkamallit edustavat luokkaperhettä.
Varsinaisen luokan ilmoitus saadaan instantoimalla malli yhdellä tai useammalla mallin argumentilla. Mallin erikoistuminen määritellään mallin ilmentymäksi tietyllä argumenttijoukolla. C++-syntaksi yrittää saada rakenteet kaikilta osin näyttämään perustietotyyppien kaltaisilta.
C++:n luokilla on jäsenensä. Luokkien jäsenet on ilmoitettu olevan joko yksityisesti tai julkisesti saatavilla määrittäjien toimesta. Määritteen jälkeen, jos jollakin löydetyllä jäsenellä on siihen liittyvä käyttöoikeus, ellei muuta määritettä havaita.
Mikä on rakenne?
Sanalla sanoen rakenne tarkoittaa yleensä nippua. Se on useita toisiinsa liittyviä elementtejä, jotka on sidottava yhteen kontekstissa tietyllä tavalla. Tällainen konteksti voi olla argumenteilla rajoitetun luvun välittämistä funktiolle.
C-ohjelmointikielen kannalta se on yhdistetty tietotyypin ilmoitus. Se määrittelee yleensä fyysisten muuttujien ryhmitellyn luettelon yhden nimen alle muistilohkossa. Se mahdollistaa eri muuttujien pääsyn yhden pisteen tai rakenteen ilmoitetun nimen kautta, joka palauttaa osoitteen, joka on sama.
Rakenne voi sisältää muita tietotyyppejä, joten sitä voidaan käyttää tietueissa, joissa on sekoitettu tietotyyppi tai muita sekatyyppejä. C:ssä se viittaa fyysisen muistin viereiseen lohkoon, joka on yleensä rajattu sanan pituuden rajoilla. Tämän seurauksena jokainen kenttä sijaitsee alusta alkaen kiinteässä tietyssä siirtymässä.
Mitä tulee C++-kieleen, rakenne on samanlainen kuin C++-luokka, mutta oletusnäkyvyys on aivan erilainen. Se voidaan varata dynaamisesti tai staattisesti joko kasaan tai pinoon eksplisiittisellä osoittimella. Struktin oletusnäkyvyys C++:ssa on yksityinen.
Tärkeimmät erot luokan ja rakenteen välillä
Johtopäätös
Voidaan päätellä, että sekä luokka että rakenne ovat yleisiä C++-ohjelmoijien keskuudessa. Luokka on viitetyyppi, joka on jaettu kasaan sekä roskien keräykseen. Kääntöpuolella rakenne on arvotyyppi, joka on allokoitu joko rivissä tai pinossa sisältäviin tyyppeihin.
Mitä tulee näkyvyyteen, oletusnäkyvyys on luokassa yksityinen, kun taas rakenteessa se on julkinen. Jätteiden kerääminen on mahdollista luokassa, koska siinä käytetään ohikulkureferenssiä. Toisaalta structissa roskien kerääminen ei ole mahdollista, koska se käyttää ohitusarvoa. Luokan koko on tyhjänä 1 tavu, lyötynä 0 tavua.