Luokka ja rakenteet

Anonim

Ennen kuin ymmärrämme eron luokan ja rakenteen välillä, meidän pitäisi tietää muutamia niihin liittyviä peruskäsitteitä. Ilman käsitteiden ymmärtämistä on vaikea ymmärtää eroja näiden kahden välillä.

Mikä on luokka ja kohde:

Nämä ovat kaksi objektiiviseen ohjelmointiin liittyviä tärkeitä käsitteitä, jotka muodostavat perustan toimintojen ja tietojen siirtämiselle muihin toimintoihin. Ymmärrettävyyden lisäämiseksi voimme korjata sen todelliseen esimerkkiin. Luokan voidaan katsoa myymälänä, ja kohde voi olla jokin yksittäisistä yksittäisistä myymälöistä, kuten päivittäistavarat, paperitavarat, hedelmät jne. Kaikilla kohteilla on pääluokan yhteiset ominaisuudet - myymälä - ja vuorostaan, esineillä voi olla omat yksinoikeutensa, kuten erityinen muotoilu, valaistus jne. Tavoitteiden avulla voimme todella käyttää luokkaa; ne muodostavat luokan esityksiä.

Luokan syntaksi

Luokka Store {

julkiset string-asiat;

Julkinen merkkijono;

}

Objektin syntaksi

Säilytä päivittäistavarakauppa = uusi myymälä ();

Store Paperi = uusi Store ();

Mikä on rakenteita?

A-rakenteisiin sisältyy vain tietoja, ja siksi se on hyödyllistä yksittäisten tietovaatimusten määrittelyssä Struct-objektien kautta. Toisin kuin luokka, sillä ei ole toimintoja. Tässä on sen syntaksi:

struct grocery_entrance {

char sisäänkäynnin_nimi [50];

int sisääntulon_koko;

} grocery_entrance;

Kaikki myymälät voivat käyttää Structin sisäänkäyntiä, jossa on yksilöllinen nimi ja koko.

Mikä on perintö?

Se on samanlainen kuin poika perii isänsä omaisuuden ja puolestaan ​​poika voi myös lisätä omia omaisuutensa. Luokka voi olla joko perusluokka tai johdettu luokka, jossa edellinen voidaan ottaa perustaksi jälkimmäisen muodostamiseksi. Johdettu luokka lisää muutamia muita ominaisuuksia itselleen lukuun ottamatta mitä se saa perusluokasta. Kun pidämme edellä mainittua esimerkkiä, ruokakauppaa voidaan edelleen johtaa tiettyyn ruokakauppaan, kuten XYZ-ruokakauppaan.

Nyt, kun tunnemme peruskäsitteet, voimme mennä todellisen luokan ja rakenteen väliseen eroon.

Kuinka he eroavat?

  • Uudelleenkäytettävyyttä: Koska luokat muodostavat peruspuitteet, niitä voidaan käyttää uudelleen; Structs ovat kuitenkin yksittäisiä elementtejä, joilla on tiettyjä ominaisuuksia, joten niitä ei voi käyttää uudelleen. Esimerkiksi päivittäistavarakaupasta voidaan käyttää kaikenlaisia ​​ruokakauppoja, mutta Grout grocery_entrance on ainutlaatuinen vain, eikä enää ole mahdollista käyttää sitä muissa luokissa.
  • näkyvyys: Kaikki luokan toiminnot ovat julkisesti saatavilla kohteilleen. Esimerkiksi meillä on toiminto nimeltään "asiat" luokassa "myymälä". Toiminto "asiat" on näkyvissä kaikissa sen esineissä, kuten "ruokakauppa", "paperitavarakauppa" jne. Tällainen näkyvyys ei ole mahdollista Structsilla, koska rakenteiden tiedot ovat itsessään rajoitettuja eivätkä ole näkyvissä muille Structs-tuotteille. Jotta asiat selviäisivät, voimme sanoa, että grocery_entrance-tiedot eivät ole julkisesti näkyvissä kaikille muille myymälöille.
  • Pass by Reference & Pass by Value: Pass by Reference lähettää ainoastaan ​​muistipaikkaa eikä varsinaisia ​​tietoja toimintoihin. Tämä tarkoittaa, että aina kun arvo muuttuu, muutos heijastuu vastaaviin toimintoihin. Pass by value puolestaan ​​lähettää vain arvoa funktioon. Tällöin arvonmuutos sen jälkeen, kun sitä lähetetään, ei näy toiminnossa. Luokan käyttötarkoitukset kulkevat referenssinä, ja Struct käyttää hyväksyvän arvon.
  • Perintövero: Luokat voidaan edelleen periä alaluokkien muodostamiseksi, mutta Structs ei voi käyttää perintöä. Esimerkiksi Class Store tuo toiminnot alaluokkaan "ruokakauppaan". Mutta 'Grocery_entrance' ei voi periä mitään toimintoa. Voimme sanoa, että tässä ei ole olemassa konseptia kuin alaryhmä.
  • Oletusarvo näkyvyys: Kaikki luokan jäsenet pidetään oletuksena yksityisiksi yksiköiksi, kun taas Structin jäsenet pidetään julkisina yksiköinä oletuksena.
  • Tyhjän luokan ja rakenteiden koko: Luokka käyttää kokoa 1 tavua vaikka se on tyhjä, kun taas Struct ei koskaan käytä mitään muistia, kun se on tyhjä. Tällöin voimme sanoa, että tyhjä rakenne on 0 bittiä.
  • Roskakokoelma: Jätteiden keräily on mahdollista luokkien kanssa, koska ne käyttävät kulkevia viitteitä. Siksi on helpompaa tehdä puhdistus yhdestä paikasta, jossa tiedot tallennetaan. Sitä vastoin roskakokoelma ei ole mahdollinen Structin kanssa, koska se käyttää arvoa ja tiedot hajallaan eri paikoissa.
  • Muistinhallinta: Koska luokka mahdollistaa roskakokoelmat, myös muistin hallinta on tehokasta. ei kuitenkaan ole tehokasta Structsin kanssa.
  • Rakentaja: Valmistaja yleensä alustaa luokan tietyillä määritetyillä arvoilla. Voimme katsoa sitä kuin jotain, joka on alustettu arvoilla. Jos uuden luokan on luotava, konstruktoria kutsutaan jakamaan muisti kyseiselle instanssille. Voimme jopa siirtää arvot argumentteina kutsumalla konstruktoria. Tulkaamme todelliseen keskusteluun nyt. Luokkiot mahdollistavat kaikentyyppisten rakentajien, kuten argumenttien kanssa tai ilman, kun taas rakenteet sallivat vain rakentajat argumentteja, eli parametrisia konstruktoreita.
  • destructor: Tuhoajaa kutsutaan aina, kun meidän on poistettava luokan esiintyminen. Tuhoaja puolestaan ​​poistaa kyseisen esiintymän ja vapauttaa muistin. Luokka voi käyttää tuhoajaa, kun taas rakenteet eivät voi.
  • Jäsenmuuttujien alustus: Luokissa voimme alustaa jäsenmuuttujat suoraan. tällainen alustus ei ole mahdollista Structsilla.
  • Objektin luominen: Tavoitteiden luomisen yleinen syntaksi luokissa on:

Demo obj = uusi demo ();

Tämä tarkoittaa sitä, että avainsanaa "uusi" on käytettävä luodessamme luokan objekteja. Tätä ei tarvita, kun luodaan objekteja Structs. Katsokaa vain niiden syntaksia:

Demo obj;

Se toimii täydellisesti ilman avainsanaa "uusi".

Milloin käyttää luokkaa ja milloin käyttää rakenteita?

Koska luokat ovat joustavampia luovuttaessa tietoja ja toimintoja yhdessä, voimme mennä siihen, kun käytettävät kohteet ovat monimutkaisia ​​ja suuria. Esimerkissämme Mall voi käyttää luokan "tallentaa" ilmaisemaan järjestelmää paremmin. Structs kuitenkin rajoittuu pienempiin esineisiin, koska ne ovat suhteellisesti vähemmän tehokkaita kuin luokat. Siksi, jos suunnittelet omia varastosi, Structs ovat paremmat valinnat.

Kuinka muokata rakenteita luokkiin ja Vice Versaan?

Olet ehkä kuullut termit "boxing" ja "unboxing" muuttaaksesi rakenteita luokkiin ja päinvastoin. Vaikka nämä ovat tehokkaita prosesseja, jotka auttavat meitä muuntamisessa, niitä on käsiteltävä varoen. Koska tämä vaikuttaa suoraan muistipaikoihin, se vaikuttaa valtavasti järjestelmämme suorituskykyyn. Lisäksi se vaikuttaa jätteiden keräysprosesseihin ja johtaa järjestelmän yleiseen tehottomuuteen. Siksi näitä tuloksia käytetään vain silloin, kun niitä tarvitaan.

Katsokaamme edellä mainittuja eroja taulukkomuodossa.

S.No käsitteet erot
luokka struct
1 Uudelleenkäytettävyyttä Täysin uudelleenkäytettävissä Ei uudelleenkäytettävissä
2 näkyvyys Kaikki luokan toiminnot ovat sen esineiden nähtävissä Rakenteen objektin tiedot eivät näy samoissa Struct-objektien muissa kohteissa
3 Ohita referenssi ja siirrä arvosta Käyttää Pass by Reference Käyttää Pass by Value
4 perintö Luokan tehtävät voivat periä sen alaluokat; antaa perinnöksi Älä koskaan anna perintöä
5 Oletuskyky Kaikki luokan jäsenet ovat oletuksena yksityisiä Kaikki jäsenet ovat julkisia oletuksena
6 Koko kun tyhjä Tyhjän luokan koko on 1 tavu Tyhjän rakenteen koko on 0 tavua
7 Roskakokoelma Käyttämällä se kulkee vertailun vuoksi, roskat voidaan kerätä Koska se käyttää arvoa, jätteiden kerääminen ei ole mahdollista
8 Muistinhallinta Jätteiden keräysprosessin helppous auttaa tehokkaassa muistihallinnassa Jätteiden keräyksen puute johtaa huonoon muistihallintaan
9 Constructors Sallii kaikentyyppiset konstruktiot, kuten parametrien kanssa tai ilman Sallii vain parametriset konstruktorit
10 purkajat Voi käyttää sitä Ei voi käyttää sitä
11 Jäsenmuuttujien alustus Sallii jäsenmuuttujien suoran alustuksen Ei salli jäsenten muuttujien suoraa sanaa
12 Objektin luominen Se on pakko käyttää avainsanaa "uusi" objektin luomisen aikana On valinnainen käyttää avainsanaa "uusi" objektin luomisen aikana
13 Milloin käyttää? Parempi suuremmille ja monimutkaisemmille kohteille, joissa perintöä tarvitaan Parempi pienemmille ja yksinkertaisemmille kohteille, joissa perinnöllä on vähemmän merkitystä.

Olemme melkein katoneet kaikki luokan ja rakenteen väliset erot, ja jos sinusta tuntuu, että jotain puuttuu, ilmoita siitä meille. Oppikaamme yhdessä ja hyödyntäkää kaiken tiedon!