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.
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 ();
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.
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.
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”.
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.
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!