Skirtumas tarp klasės ir strypo

Prieš suvokdami skirtumą tarp klasės ir strypo, turėtume žinoti keletą pagrindinių su jais susijusių sąvokų. Nesuprantant sąvokų, sunku suvokti skirtumus tarp šių dviejų.

Kas yra klasė ir objektas:

Tai yra dvi svarbios sąvokos, susijusios su objektiniu programavimu, ir jos sudaro pagrindą įrėminti funkcijas ir perduoti duomenis kitoms funkcijoms. Norėdami geriau suprasti, galime tai susieti su realaus gyvenimo pavyzdžiu. Klasė gali būti laikoma parduotuvė, o objektas gali būti bet kuri atskira, specifinė parduotuvė, pavyzdžiui, bakalėjos, kanceliarinės prekės, vaisiai ir kt. Visi objektai turi bendras pagrindinės klasės savybes - parduotuvę - ir, savo ruožtu, objektai gali turėti savo išskirtines savybes, tokias kaip specifinis dizainas, apšvietimas ir pan., per objektus mes iš tikrųjų galime naudoti klasę; jie sudaro klasės egzempliorius.

Klasės sintaksė

Klasių parduotuvė

vieši styginių dalykai;

viešas styginių dizainas;

Objekto sintaksė

Parduotuvės bakalėjos = nauja parduotuvė ();

Kanceliarinės prekės parduotuvėje = ​​nauja parduotuvė ();

Kas yra striuka?

„Struct“ apima tik duomenis, todėl naudinga apibrėžti individualius duomenų reikalavimus per „Struct“ objektus. Skirtingai nuo klasės, jai trūksta funkcijų. Čia yra jos sintaksė:

struct grocery_entrance

char įėjimo_vardas [50];

int įėjimo_ dydis;

grocery_entrance;

Visos parduotuvės gali naudoti „Struct“ įėjimą su atskirais pavadinimais ir dydžiais.

Kas yra paveldimumas?

Tai panašu į tai, kaip sūnus paveldi tėvo turtą, o sūnus savo ruožtu gali pridėti ir keletą kitų savo turtų. Klasė gali būti arba pagrindinė klasė, arba išvestinė klasė, kurioje pirmoji gali būti laikoma pagrindu sudaryti antrąją. Išvestinė klasė prideda keletą kitų savybių, išskyrus tai, ką ji gauna iš pagrindinės klasės. Kai atsižvelgsime į aukščiau pateiktą pavyzdį, bakalėjos parduotuvė vis tiek gali būti priskirta konkrečiai maisto prekių parduotuvei, pavyzdžiui, XYZ.

Dabar, kai jau susipažinome su pagrindinėmis sąvokomis, galime pereiti prie tikrojo skirtumo tarp klasės ir stručio.

Kuo jie skiriasi??

  • Pakartotinis naudojimas: Kadangi klasės sudaro pagrindinę sistemą, jos gali būti pakartotinai naudojamos; Tačiau strypai yra atskiri elementai, turintys specifinių savybių, todėl jų negalima pakartotinai naudoti. Pvz., Maisto prekių parduotuvė „Class“ gali būti naudojama bet kokio tipo maisto prekių parduotuvėje, tačiau „Struct“ grocery_entrance yra būdinga tik tam ir nėra prasmės pakartotinai naudoti ją kitose klasėse..
  • Matomumas: Visos klasės funkcijos yra viešai prieinamos jos objektams. Pvz., Mes turime funkciją pavadinimu „daiktai“, priklausančią klasei „parduotuvė“. Funkcija „daiktai“ yra matoma visiems jos objektams, tokiems kaip „bakalėjos parduotuvė“, „kanceliarinių prekių parduotuvė“ ir kt. „Structs“ toks matomumas neįmanomas, nes „struct“ duomenys yra riboti patys ir nematomi kitiems striukams. Kad viskas būtų aišku, galime pasakyti, kad „grocery_entrance“ duomenys nėra viešai matomi visose kitose parduotuvėse..
  • Pravažiuokite nuoroda ir praeikite pagal vertę: Praeinant nuoroda į funkcijas siunčia tik atminties vietą, o ne tikrus duomenis. Tai reiškia, kad pasikeitus vertei, pokyčiai atsispindi atitinkamose funkcijose. Savo ruožtu praleidžiant vertę, tiesiog siunčiama reikšmė funkcijai. Tokiu atveju vertės pasikeitimas po to, kai jis bus išsiųstas, neatspindės funkcijos. Klasė naudoja praeiti pagal nuorodą, o „Struct“ naudoja leidimo vertę.
  • Paveldimumas: Klasės gali būti toliau paveldimos, kad sudarytų pogrupius, tačiau stručiai negali panaudoti paveldėjimo. Pavyzdžiui, klasių parduotuvė savo funkcijas suteikia pogrupiui „maisto prekių parduotuvė“. Bet striuct 'grocery_entrance' negali paveldėti jokios funkcijos. Galime pasakyti, kad čia nėra tokios sąvokos kaip substruktūra.
  • Numatytasis matomumas: Visi klasės nariai pagal nutylėjimą yra laikomi privačiais subjektais, o „Struct“ nariai pagal nutylėjimą laikomi viešaisiais subjektais..
  • Tuščios klasės ir strypo dydis: Klasė naudoja 1 baito dydį net tada, kai ji tuščia, tuo tarpu „Struct“ niekada nenaudoja jokios atminties, kai ji tuščia. Tai reiškia, kad galime pasakyti, kad tuščio strypo dydis lygus 0 baitų.
  • Šiukšlių kolekcija: Šiukšles galima rinkti klasėse, nes jos naudojasi nuorodomis. Todėl valymą lengviau atlikti vienoje vietoje, kur saugomi duomenys. Kita vertus, atliekant „Struct“ šiukšlių rinkti neįmanoma, nes jos naudojamos pagal reikšmę ir duomenys yra išsibarstę skirtingose ​​vietose.
  • Atminties valdymas: Kadangi klasė leidžia rinkti šiukšles, atminties valdymas taip pat efektyvus; tačiau tai nėra taip efektyvu su „Structs“.
  • Konstruktorius: Paprastai konstruktorius klasę inicijuoja tam tikromis nurodytomis vertėmis. Mes galime į tai pažvelgti kaip į tai, kas buvo pradėta vertybėmis. Jei reikia sukurti naują klasę, konstruktorius kviečiamas paskirstyti atmintį tam egzemplioriui. Kviečiame konstruktorių netgi perduoti vertybes kaip argumentus. Leisk mums dabar pradėti diskusiją. Klasėse leidžiami visų tipų konstruktoriai, pavyzdžiui, su argumentais arba be jų, tuo tarpu konstrukcijos leidžia konstruktoriams tik argumentus, t. Y. Parametrizuoti konstruktoriai.
  • Naikintojas: Naikintojas iškviečiamas visada, kai mums reikia ištrinti klasės egzempliorių. Naikintojas, savo ruožtu, ištrina tą egzempliorių ir atlaisvina atmintį. Klasė gali naudoti naikintoją, tuo tarpu „Struct“ negali.
  • Nario kintamųjų inicijavimas: Klasėse galime tiesiogiai inicijuoti narių kintamuosius; tokia inicializacija negalima naudojant „Structs“.
  • Objekto sukūrimas: Bendra objektų kūrimo klasėse sintaksė yra:

Demo obj = naujas demonstracinis ();

Tai reiškia, kad kurdami klasės objektus turime naudoti raktinį žodį „naujas“. Kuriant „Structs“ objektus to nereikia. Pažvelkite į jų sintaksę:

Demo obj;

Tai puikiai veikia net ir be raktinio žodžio „naujas“.

Kada naudoti klasę ir kada naudoti striukes?

Kadangi klasės lanksčiau tvarko duomenis ir funkcijas kartu, galime to ieškoti, kai naudojami objektai yra sudėtingi ir dideli. Mūsų pavyzdyje prekybos centras gali naudoti klasės „parduotuvę“, kad sistema būtų geriau išreikšta. Tačiau struktūros apsiriboja mažesniais objektais, nes jos yra palyginti ne tokios veiksmingos kaip klasės. Todėl, jei suprojektuosite savo parduotuvę, geresnis pasirinkimas yra strypai.

Kaip paversti „Struct“ į klasę ir „Vice Versa“?

Galbūt girdėjote terminus „boksas“ ir „neboksuoti“, jei norite paversti „Struct“ į klasę ir atvirkščiai. Nors tai yra veiksmingi procesai, padedantys mums atlikti pertvarką, su jais reikėtų elgtis atsargiai. Kadangi tai tiesiogiai veikia atminties vietas, tai daro didžiulę įtaką mūsų sistemos veikimui. Be to, tai daro įtaką šiukšlių rinkimo procesams ir lemia bendrą sistemos neveiksmingumą. Todėl naudokite šias konversijas tik tada, kai to reikia.

Pažvelkime į aukščiau paminėtus lentelių formos skirtumus.

S.Ne Sąvokos Skirtumai
Klasė Struct
1 Pakartotinis panaudojimas Visiškai pakartotinai naudojamas Negalima pakartotinai naudoti
2 Matomumas Visos klasės funkcijos yra matomos jos objektams Straipsnio objekto duomenys nėra matomi kitiems to paties strypo objektams
3 Pravažiuokite nuoroda ir praeikite vertę Naudojasi praeidami nuoroda Naudojasi pagal vertę
4 Paveldimumas Klasės funkcijas gali paveldėti poklasiai; leidžia paveldėti Niekada neleidžia paveldėti
5 Numatytasis matomumas Visi klasės nariai pagal nutylėjimą yra privatūs Visi „Struct“ nariai pagal nutylėjimą yra vieši
6 Dydis, kai tuščia Tuščios klasės dydis yra 1 baitas Tuščio strypo dydis yra 0 baitų
7 Šiukšlių kolekcija Šiukšlių rinkimas yra galimas dėl to, kad naudojama nuoroda Šiukšlių rinkti neįmanoma, nes jos vertė praeina
8 Atminties valdymas Šiukšlių rinkimo proceso paprastumas padeda efektyviai valdyti atmintį Šiukšlių surinkimo trūkumas lemia blogą atminties valdymą
9 Konstruktoriai Leidžia visų tipų konstruktoriams, pavyzdžiui, su parametrais ar be jų Leidžia tik parametrizuojamus konstruktorius
10 Naikintojai Gali ja naudotis Negalima juo naudotis
11 Nario kintamųjų inicijavimas Leidžia tiesiogiai inicijuoti narių kintamuosius Neleidžia tiesiogiai inicijuoti kintamųjų narių žodžiu
12 Objekto kūrimas Kuriant objektą, būtina naudoti raktinį žodį „naujas“ Kuriant objektą, neprivaloma naudoti raktinį žodį „naujas“
13 Kada naudoti? Geriau didesniems ir sudėtingesniems objektams, kur reikalingas palikimas Geriau mažesniems ir paprastesniems objektams, kur paveldėjimas turi mažiau reikšmės.

Mes beveik išsklaidėme visus „Class“ ir „Struct“ skirtumus. Jei manote, kad kažko trūksta, praneškite mums. Mokykimės kartu ir kuo geriau išnaudokime tas žinias!