Klassi ja struktuuri erinevus

Enne kui mõistame klassi ja struktuuri erinevust, peaksime teadma mõnda nendega seotud põhimõistet. Ilma mõistete mõistmiseta on raske mõista nende kahe erinevusi.

Mis on klass ja objekt:

Need on kaks olulist objektorienteeritud programmeerimisega seotud kontseptsiooni ning need on aluseks funktsioonide ja muudele funktsioonidele edastatavate andmete raamimisel. Paremaks mõistmiseks saame selle seostada reaalse elu näitega. Klassi võib pidada kaupluseks ja esemeks võib olla mis tahes üksik, konkreetne kauplus, näiteks toidupoed, kirjatarbed, puuviljad jne. Kõigil objektidel on põhiklassi - poe - ühised omadused ja need omakorda objektidel võivad olla oma eksklusiivsed omadused, näiteks konkreetne kujundus, valgustus jne. Objektide kaudu saame tegelikult klassi kasutada; nad moodustavad klassi eksemplare.

Klassi süntaks

Klassikauplus

avalikud keelpillid;

avaliku keelpillikujundus;

Objekti süntaks

Kaupluse toidupood = uus pood ();

Store Stationery = uus pood ();

Mis on puru?

Struct sisaldab ainult andmeid ja seetõttu on see abiks üksikute andmenõuete kujundamisel Struct-objektide kaudu. Erinevalt klassist puuduvad sellel funktsioonid. Siin on selle süntaks:

struct grocery_entrance

char sissepääsu_nimi [50];

int sissepääs_suurus;

toidupoed;

Kõik kauplused saavad kasutada Struct'i sissepääsu individuaalsete nimede ja suurustega.

Mis on pärimine?

See sarnaneb sellega, kuidas poeg pärib oma isa valdused ja poeg saab omakorda lisada ka mõne muu oma valduse. Klass võib olla kas põhiklass või tuletatud klass, milles viimase moodustamiseks võib aluseks võtta esimese. Tuletatud klass lisab enda jaoks veel mõned muud omadused, välja arvatud see, mida ta saab põhiklassist. Kui arvestame ülaltoodud näidet, saab toidupoe siiski tuletada konkreetsest toidupoest, näiteks XYZ toidupoest.

Nüüd, kui oleme põhimõistetega tuttavad, võime uurida tegelikku erinevust klassi ja struuma vahel.

Kuidas nad erinevad?

  • Korduvkasutatavus: Kuna klassid moodustavad põhiraamistiku, saab neid uuesti kasutada; Struktuurid on siiski individuaalsed elemendid, millel on spetsiifilised omadused, nii et neid ei saa uuesti kasutada. Näiteks toidupoodi Klassi saab kasutada igat tüüpi toidupoodide jaoks, kuid Structi toidupood_entrance on spetsiifiline ainult selle jaoks ja seda pole mõtet teistes klassides uuesti kasutada..
  • Nähtavus: Kõik klassi funktsioonid on selle objektidele avalikult kättesaadavad. Näiteks on meil klassi „pood” all funktsioon nimega „asjad”. Funktsioon "asjad" on nähtav kõigile selle objektidele, näiteks "toidupood", "kirjatarvete pood" jne. Structsi puhul pole selline nähtavus võimalik, kuna struktuuri andmed on piiratud iseendaga ja pole nähtavad teistele struumadele. Asjade selgeks tegemiseks võime öelda, et 'grocery_entrance' andmed pole kõigis teistes poodides avalikult nähtavad..
  • Möödasõit ja väärtus: Möödudes viitest, saadetakse funktsioonidesse ainult mälu asukohta, mitte tegelikke andmeid. See tähendab, et kui väärtus muutub, kajastub muutus vastavates funktsioonides. Väärtusest möödumine omakorda saadab väärtuse funktsiooni. Sel juhul väärtuse muutus pärast selle saatmist funktsioonis ei kajastu. Klass kasutab möödasõitu ja Struct kasutab läbimisväärtust.
  • Pärand: Klassid võivad alamklasside moodustamiseks edasi pärida, kuid kihistused ei saa pärandit kasutada. Näiteks annab klassipood oma funktsioonid alamklassile „toidupood“. Kuid kokkuvõte 'grocery_entrance' ei saa ühtegi funktsiooni pärida. Võib öelda, et siin pole sellist mõistet nagu alamstruktuur.
  • Vaikimisi nähtavus: Kõiki klassi liikmeid hoitakse vaikimisi eraõiguslike üksustena, samas kui struktuuri liikmeid hoitakse vaikimisi avalik-õiguslike üksustena..
  • Tühja klassi ja struktuuri suurus: Klass kasutab 1 baiti suurust suurust isegi siis, kui see on tühi, samas kui Struct ei kasuta kunagi tühja mälu. See tähendab, et võime öelda, et tühja struktuuri suurus on 0 baiti.
  • Prügivedu: Klassidega on prügivedu võimalik, kuna nad kasutavad möödasõitu. Seetõttu on puhastamist lihtsam teha ühes kohas, kus andmeid hoitakse. Teisest küljest ei ole Struktiga prügivedu võimalik, kuna see kasutab möödasõitu ja andmed on hajutatud eri kohtadesse.
  • Mäluhaldus: Kuna klass lubab prügivedu, on ka mäluhaldus tõhus; kuid see pole Structsi puhul nii tõhus.
  • Konstruktor: Ehitaja lähtestab klassi üldiselt teatud kindlaksmääratud väärtustega. Me võime vaadata seda nagu midagi, mis on väärtustega alustatud. Kui tuleb luua uus klass, kutsutakse konstruktor selle mälestuse jaoks mälu eraldama. Ehitajale helistades saame isegi väärtusi argumentidena edastada. Tulgem nüüd oma tegeliku arutelu juurde. Klassid lubavad igat tüüpi konstruktoreid, näiteks argumentidega või ilma, samas kui konstruktsioonid lubavad konstruktoreid vaid argumentidega, st parameetrilised konstruktorid.
  • Hävitaja: Hävitajale helistatakse alati, kui peame kustutama klassi esinemisjuhu. Hävitaja omakorda kustutab selle eksemplari ja vabastab mälu. Klass saab kasutada hävitajat, samal ajal kui puri ei saa.
  • Liikme muutujate lähtestamine: Klassides saame liikmemuutujad otse lähtestada; selline initsialiseerimine pole Structsi puhul võimalik.
  • Objekti loomine: Objektide loomise üldine süntaks klassides on:

Demo obj = uus demo ();

See tähendab, et klassiobjektide loomisel peame kasutama märksõna 'uus'. Struktuuriobjektide loomisel pole see vajalik. Heitke pilk nende süntaksile:

Demo obj;

See töötab suurepäraselt ka ilma märksõnata “uus”.

Millal klassi kasutada ja millal struuma kasutada?

Kuna klassid on andmete ja funktsioonide käsitsemisel paindlikumad, võime seda kasutada siis, kui kasutatavad objektid on keerukad ja suured. Meie näites saab Mall kasutada klassi 'pood' süsteemi paremaks väljendamiseks. Struktuurid on aga piiratud väiksemate objektidega, kuna need on suhteliselt vähem efektiivsed kui klassid. Seetõttu, kui kujundate oma poe, on parem valik Struktuurid.

Kuidas teisendada struktuuri klassi- ja aseversiooniks?

Võib-olla olete kuulnud termineid "poks" ja "lahtivõtmine", et muuta Struct klassiks ja vastupidi. Kuigi need on tõhusad protsessid, mis aitavad meil ümberkorraldamist, tuleks nendesse suhtuda ettevaatlikult. Kuna see mõjutab otseselt mälu kohti, mõjutab see meie süsteemi jõudlust tohutult. Lisaks mõjutab see prügiveduprotsesse ja põhjustab süsteemi üldist ebatõhusust. Seetõttu kasutage neid konversioone ainult vajadusel.

Vaatame tabelite kujul ülalnimetatud erinevusi.

S.Ei Kontseptsioonid Erinevused
Klass Struct
1 Korduvkasutatavus Täielikult uuesti kasutatav Pole taaskasutatav
2 Nähtavus Kõik klassi funktsioonid on selle objektidele nähtavad Struktuuri objekti andmed pole sama struktuuri teiste objektide jaoks nähtavad
3 Mööduge viitest ja mööduge väärtusest Kasutab möödaminnes Kasutab väärtuse järgi
4 Pärimine Klassi funktsioone saab pärida selle alaklasside järgi; lubab pärandust Kunagi ei luba pärimist
5 Vaikimisi nähtavus Kõik klassi liikmed on vaikimisi privaatsed Kõik Struktuuri liikmed on vaikimisi avalikud
6 Tühja suurus Tühja klassi suurus on 1 bait Tühja struktuuri suurus on 0 baiti
7 Prügivedu Kuna see kasutab möödasõitu, on prügivedu võimalik Kuna see kasutab möödasõitu, pole prügi kogumine võimalik
8 Mäluhaldus Prügi kogumise lihtsus aitab mälu tõhusalt hallata Prügiveo puudumine põhjustab halva mäluhalduse
9 Konstruktorid Võimaldab igat tüüpi konstruktoreid, näiteks parameetritega või ilma Lubatud on ainult parameetritega konstruktorid
10 Hävitajad Oskab seda kasutada Ei saa seda kasutada
11 Liikme muutujate lähtestamine Võimaldab liikmesmuutujate otsest lähtestamist Ei võimalda liikmesmuutujate otsest sõnas käivitamist
12 Objektide loomine Objektide loomisel tuleb kasutada märksõna „uus” Objektide loomisel on vabatahtlik kasutada märksõna „uus”
13 Millal kasutada? Parem suuremate ja keerukate objektide jaoks, kus nõutakse pärandit Parem väiksemate ja lihtsamate objektide jaoks, kus pärimisel on vähem tähtis.

Oleme peaaegu kõik klassi ja Struct'i erinevused katnud ja kui teile tundub, et midagi on puudu, palun andke meile sellest teada. Õppigem koos ja kasutame neid teadmisi maksimaalselt ära!