Razlika med razredom in strukturo

Preden razumemo razliko med Class in Struct, bi morali poznati nekaj osnovnih pojmov, povezanih z njimi. Brez razumevanja pojmov je težko razumeti razlike med obema.

Kaj je razred in predmet:

To sta dva pomembna koncepta, povezana z objektno usmerjenim programiranjem, in tvorita osnovo za uokvirjanje funkcij in prenosa podatkov na druge funkcije. Za boljše razumevanje ga lahko povežemo s primerom iz resničnega življenja. Razred se lahko šteje za trgovino, predmet pa lahko katera koli od posameznih, posebnih trgovin, kot so trgovina z živili, pisarniški material, sadje itd. Vsi predmeti imajo skupne lastnosti glavnega razreda - trgovina -, kar pomeni, predmeti imajo lahko svoje ekskluzivne lastnosti, kot so specifična zasnova, osvetlitev itd. S pomočjo predmetov lahko dejansko uporabimo razred; tvorijo primerke razreda.

Sintaksa razreda

Razrednica

stvari z javnimi vrvicami;

oblikovanje javnih vrvic;

Sintaksa predmeta

Trgovina z živili = nova trgovina ();

Store Stationery = nova trgovina ();

Kaj je struktura?

Struktura vključuje samo podatke, zato je koristno pri oblikovanju posameznih zahtev po podatkih prek predmetov Struct. Za razliko od razreda nima funkcij. Tu je njegova skladnja:

struct grocery_entrance

char entry_name [50];

int entry_size;

trgovina z živili;

V vseh trgovinah je mogoče uporabiti strukturo "vhod" s posameznimi imeni in velikostmi.

Kaj je dedovanje?

Podobno je, kako sin podeduje imetje svojega očeta, sin pa lahko doda tudi nekaj drugih lastnih stvari. Razred je lahko osnovni razred ali izpeljani razred, v katerem se prvi lahko vzame kot osnova za oblikovanje drugega. Izvedeni razred doda nekaj drugih lastnosti zase, razen tistih, ki jih dobi iz osnovnega razreda. Ko razmislimo o zgornjem primeru, lahko trgovina z živili še vedno pride do posebne trgovine, kot je trgovina z živili XYZ.

Zdaj, ko smo seznanjeni z osnovnimi pojmi, se lahko spustimo v dejansko razliko med Class in Struct.

Kako se razlikujejo?

  • Ponovna uporabnost: Ker so razredi osnovni okvir, jih je mogoče ponovno uporabiti; Strukture pa so posamezni elementi s specifičnimi lastnostmi, zato jih ni mogoče ponovno uporabiti. Na primer, trgovina z živili Class se lahko uporablja za katero koli vrsto trgovine, toda Struct grocery_entrance je specifičen samo za to in nima smisla, da bi ga ponovno uporabljali v drugih razredih.
  • Vidnost: Vse funkcije razreda so javno dostopne njegovim predmetom. Na primer, v razredu "trgovina" imamo funkcijo z imenom "stvari". Funkcija "stvari" je vidna vsem predmetom, kot so "trgovina z živili, trgovina s pisarniškim materialom" itd. Taka vidnost pri strukturah ni mogoča, saj so podatki strukture omejeni nase in niso vidni drugim strukturam. Da bi bile stvari jasne, lahko rečemo, da podatki 'grocery_entrance' niso javno vidni v vseh drugih trgovinah.
  • Pojdite po referenci in mimo vrednosti: Funkcija Pass by Reference v funkcije pošilja samo pomnilniško lokacijo in ne dejanske podatke. To pomeni, da se vsakič, ko se vrednost spremeni, sprememba odraža v ustreznih funkcijah. Po drugi strani vrednost pošlje vrednost funkciji. V tem primeru se sprememba vrednosti po pošiljanju funkcije ne bo odražala v funkciji. Razred uporablja pass by reference, Struct pa uporablja pass pass vrednost.
  • Dediščina: Razredi se lahko nadalje podedujejo in tvorijo podklase, vendar Strukture ne morejo uporabiti dedovanja. Na primer, Trgovina razredov daje svoje funkcije podrazredu "trgovina z živili". Toda Struct "grocery_entrance" ne more podedovati nobene funkcije. Lahko rečemo, da tukaj ne obstaja tak koncept, kot je podstruktura.
  • Privzeto vidljivost: Vsi člani razreda so privzeto shranjeni kot zasebni subjekti, medtem ko so člani Strukture privzeto kot javni subjekti.
  • Velikost praznega razreda in strukture: Razred uporablja velikost 1 bajta tudi, ko je prazen, medtem ko Struct nikoli ne uporablja pomnilnika, ko je prazen. To pomeni, da lahko rečemo, da je velikost prazne strukture enaka 0 bajtov.
  • Odvoz smeti: Zbiranje smeti je možno pri Razredih, saj uporabljajo referenčne podatke. Zato je čiščenje lažje opraviti na enem mestu, kjer so podatki shranjeni. Po drugi strani pa s strukturo ni mogoče zbirati smeti, ker uporablja vrednost mimo, podatki pa so razpršeni na različnih lokacijah.
  • Upravljanje pomnilnika: Ker razred dopušča zbiranje smeti, je učinkovito tudi upravljanje pomnilnika; vendar pri strukturah to ni tako učinkovito.
  • Konstruktor: Konstruktor na splošno inicializira razred z določenimi določenimi vrednostmi. Na to lahko gledamo kot na nekaj, kar je bilo inicializirano z vrednostmi. Če je treba ustvariti nov razred, je konstruktor pozvan, da dodeli pomnilnik za ta primerek. Med klicem konstruktorju lahko celo posredujemo vrednosti kot argumente. Pojdimo zdaj k naši dejanski razpravi. Razredi omogočajo konstruktorje vseh vrst, na primer z ali brez argumentov, medtem ko konstrukcije omogočajo konstruktorjem le z argumenti, tj. Parametriziranimi konstruktorji.
  • Destruktor: Destruktor se pokliče vsakič, ko moramo izbrisati primerek razreda. Destruktor nato primerek izbriše in sprosti pomnilnik. Razred lahko uporablja destruktor, medtem ko Strukt ne more.
  • Pobuda za spremenljivke članov: V razredih lahko inicializiramo spremenljivke članice neposredno; taka inicializacija s strukturami ni mogoča.
  • Ustvarjanje predmeta: Splošna sintaksa za ustvarjanje predmetov v razredih je:

Demo obj = nov Demo ();

To pomeni, da moramo pri ustvarjanju predmetov razreda uporabljati ključno besedo 'new'. To ni potrebno pri ustvarjanju predmetov Struktur. Oglejte si njihovo skladnjo:

Demo obj;

Deluje popolnoma tudi brez ključne besede „novo“.

Kdaj uporabiti razred in kdaj uporabiti strukturo?

Ker so razredi bolj fleksibilni pri skupni izmenjavi podatkov in funkcij, lahko to storimo tudi takrat, ko so uporabljeni predmeti kompleksni in veliki. V našem primeru lahko Mall razred "trgovina" uporabi za boljši prikaz sistema. Strukture pa so omejene na manjše predmete, saj so sorazmerno manj učinkovite od razredov. Če torej sami oblikujete trgovino, so Structs boljša izbira.

Kako pretvoriti strukturo v razred in vice Versa?

Morda ste slišali izraza "boxing" in "unboxing" za pretvorbo strukture v razred in obratno. Čeprav so to učinkoviti postopki, ki nam pomagajo pri pretvorbi, je treba z njimi ravnati previdno. Ker to neposredno vpliva na pomnilniške lokacije, ima velik vpliv na delovanje našega sistema. Poleg tega vpliva na procese odvoza smeti in vodi do splošne neučinkovitosti sistema. Zato te pretvorbe uporabljajte le, kadar je to potrebno.

Poglejmo zgoraj omenjene razlike v tabeli.

S. št Koncepti Razlike
Razred Struktura
1 Ponovna uporabnost Popolnoma uporabna Ni ponovno uporabno
2 Vidnost Vse funkcije razreda so vidne njegovim predmetom Podatki predmeta objekta niso vidni drugim objektom iste strukture
3 Pass by Reference & Pass po vrednosti Uporabe Pojdite po referencah Uporaba porabljena vrednost
4 Dediščina Funkcije razreda lahko podedujejo po njegovih podrazredih; omogoča dedovanje Nikoli ne dovoli dedovanja
5 Privzeto vidnost Vsi člani razreda so privzeto zasebni Vsi člani strukture so privzeto javni
6 Velikost, ko je prazna Velikost praznega razreda je 1 bajt Velikost prazne Strukture je 0 bajtov
7 Odvoz smeti Ker se uporablja referenčna pot, je možno zbiranje smeti Ker uporablja mimo vrednosti, odvoz smeti ni mogoč
8 Upravljanje spomina Enostavnost postopka odvoza smeti pomaga pri učinkovitem upravljanju spomina Pomanjkanje odvoza smeti povzroči slabo upravljanje spomina
9 Konstruktorji Omogoča konstruktorjem vseh vrst, na primer s parametri ali brez njih Dovoli samo parametrizirane konstruktorje
10 Destruktorji Lahko ga uporabim Ne morem ga uporabiti
11 Inicializacija spremenljivk članic Omogoča neposredno inicializacijo spremenljivk članov Ne omogoča neposredne inicializacije besednih spremenljivk
12 Ustvarjanje predmeta Pri ustvarjanju predmeta je treba uporabiti ključno besedo "novo" Med ustvarjanjem predmetov ni mogoče uporabiti ključne besede "novo"
13 Kdaj uporabljati? Boljše za večje in zapletene predmete, pri katerih je potrebno dedovanje Boljše za manjše in enostavnejše predmete, pri katerih je dedovanje manj pomembno.

Skoraj smo zajeli vse razlike med Class in Struct, in če menite, da nekaj manjka, nas obvestite. Naučimo se skupaj in čim bolj izkoristimo to znanje!