Razlika između klase i strukture

Prije nego što shvatimo razliku između klase i strukture, trebali bismo znati nekoliko osnovnih pojmova povezanih s njima. Bez razumijevanja pojmova, teško je shvatiti razlike između to dvoje.

Što je klasa i objekt:

Ovo su dva važna koncepta povezana s objektno orijentiranim programiranjem i oni čine osnovu za uokvirivanje funkcija i podataka koji prelaze na druge funkcije. Da bismo bolje razumjeli, možemo ga povezati s primjerom iz stvarnog života. Klasa se može smatrati trgovinom, a Predmet može biti bilo koja pojedinačna, specifična trgovina kao što su namirnice, pribor za jelo, voće itd. Svi predmeti imaju zajednička svojstva glavne klase - prodavaonicu, i zauzvrat, predmeti mogu imati svoja ekskluzivna svojstva poput specifičnog dizajna, rasvjete itd. Kroz objekte zapravo možemo koristiti klasu; tvore instancije klase.

Sintaksa klase

Klasa trgovina

stvari javnih žica;

dizajn javnih žica;

Sintaksa objekta

Trgovina namirnicama = nova trgovina ();

Store Stationery = nova trgovina ();

Što je struktura?

Struktura uključuje samo podatke i zato je korisno uokviriti pojedinačne potrebe za podacima putem objekata Struct. Za razliku od klase, ona nema funkcije. Evo njegove sintakse:

Stru grocery_entrance

char entry_name [50];

int entry_size;

trgovina prehrambenih proizvoda;

Sve trgovine mogu koristiti Structov „ulaz“ s pojedinačnim imenima i veličinama.

Što je nasljeđivanje?

Slično je s načinom na koji sin nasljeđuje posjede svog oca, a zauzvrat, sin može dodati i neke druge svoje posjede. Klasa može biti ili osnovna klasa ili izvedena klasa u kojoj se prvi može uzeti kao baza koja čini drugu. Derivirana klasa dodaje malo drugih svojstava za sebe, osim onoga što dobiva od osnovne klase. Kad razmotrimo gornji primjer, trgovina prehrambenih proizvoda i dalje se može prevesti u određenu trgovinu, poput XYZ-ove trgovine..

Sada kada smo upoznati s osnovnim konceptima, možemo ući u stvarnu razliku između Klase i Strukture.

Kako se razlikuju?

  • Ponovno iskoristivost: Kako klase čine osnovni okvir, mogu se ponovno upotrijebiti; Međutim, konstrukcije su pojedinačni elementi sa specifičnim svojstvima, pa ih nije moguće ponovno upotrijebiti. Na primjer, Klasa prehrambenih proizvoda može se koristiti za bilo koju vrstu namirnica, ali Struct trgovina prehrambenih proizvoda specifična je samo za to i nema smisla ponovo je koristiti u drugim klasama..
  • Vidljivost: Sve funkcije klase su javno dostupne njegovim objektima. Na primjer, imamo funkciju pod nazivom "stvari" pod Klasa "trgovina". Funkcija "stvari" vidljiva je svim njezinim objektima, poput "trgovina prehrambenim proizvodima", "prodavaonica konfekcije" itd. Takva vidljivost nije moguća kod struktura jer su podaci strukture ograničeni na sebe i nisu vidljivi ostalim strukturama. Da stvari budu jasne, možemo reći da podaci 'grocery_entrance' nisu javno vidljivi u svim ostalim trgovinama.
  • Proći referentom i procijeni po vrijednosti: Pass by Reference šalje funkcijama samo memorijsko mjesto, a ne stvarne podatke. To znači da kad god se vrijednost promijeni, promjena se odražava u odgovarajućim funkcijama. Zauzvrat, proslijedite vrijednost samo je vrijednost poslati funkciji. U tom slučaju, promjena vrijednosti nakon što je poslana neće se odraziti na funkciju. Klasa koristi pass referencu, a Struct koristi vrijednost pass.
  • Nasljeđivanje: Klase se mogu dalje naslijediti radi formiranja potklasa, ali Strukture ne mogu iskoristiti nasljeđivanje. Na primjer, Klasa trgovina svoje funkcije daje podklasi „trgovina namirnicama“. Ali Struct "grocery_entrance" ne može naslijediti nijednu funkciju. Možemo reći da ovdje ne postoji koncept poput podsustava.
  • Zadana vidljivost: Svi članovi Klase zadano su privatni subjekti, dok su članovi Strukture prema zadanim postavkama zadržani kao javni subjekti.
  • Veličina praznog razreda i strukture: Klasa koristi veličinu od 1 bajta čak i kad je prazna, dok Struct nikad ne koristi nijednu memoriju kada je prazna. To znači da možemo reći da je veličina prazne strukture jednaka 0 bajtu.
  • Kolekcija smeća: Prikupljanje smeća moguće je s klasama, jer one koriste propusne reference. Zbog toga je čišćenje lakše napraviti na jednom mjestu gdje se podaci pohranjuju. S druge strane, prikupljanje smeća nije moguće pomoću Struct-a, jer koristi propusne vrijednosti i podaci su raštrkani na različitim lokacijama.
  • Upravljanje memorijom: Budući da klasa omogućuje prikupljanje smeća, učinkovito je i upravljanje memorijom; međutim, nije toliko učinkovit sa Structs.
  • Konstruktor: Konstruktor općenito inicijalizira klasu s određenim određenim vrijednostima. Na to možemo gledati kao na nešto što je inicijalizirano vrijednostima. Ako se mora stvoriti nova klasa, konstruktor se poziva da dodijeli memoriju za tu instancu. Čak možemo prenijeti vrijednosti kao argumente dok zovemo konstruktor. Dođite sada do naše stvarne rasprave. Klase dopuštaju konstruktorima svih vrsta, poput argumenata sa ili bez, dok konstrukcije dopuštaju konstruktorima samo argumente, tj. Parametrizirane konstruktore.
  • destructor: Destruktor se zove kad god moramo izbrisati instancu klase. Destruktor zauzvrat briše tu instancu i oslobađa memoriju. Razred može koristiti destruktor, dok Strukt ne može.
  • Inicijalizacija varijabli članova: U Klase možemo izravno inicijalizirati varijable članice; takva inicijalizacija nije moguća sa Structs.
  • Izrada objekta: Općenita sintaksa za stvaranje predmeta u klasama je:

Demo obj = novi Demo ();

To znači da moramo koristiti ključnu riječ "novo" za vrijeme stvaranja predmeta klase. Ovo nije potrebno prilikom stvaranja objekata Structs. Pogledajte samo njihovu sintaksu:

Demo obj;

Odlično funkcionira čak i bez ključne riječi "novo".

Kada koristiti klasu i kada koristiti strukturu?

Kako su klase fleksibilnije u zajedničkom dijeljenju podataka i funkcija, to možemo učiniti kada su korišteni predmeti složeni i veliki. U našem primjeru, trgovački centar može pomoću klase "trgovina" izraziti sustav na bolji način. Međutim, strukture su ograničene na manje objekte jer su relativno manje učinkovite od klasa. Stoga, ako dizajnirate vlastitu trgovinu, Structs su bolji izbor.

Kako pretvoriti strukturu u klasu i vice Versa?

Možda ste čuli izraze „boks“ i „odbacivanje“ da biste pretvorili Strukturu u klasu i obrnuto. Iako su to učinkoviti procesi koji nam pomažu u pretvorbi, s njima se treba postupati oprezno. Budući da to izravno utječe na memorijske lokacije, ima ogroman utjecaj na performanse našeg sustava. Štoviše, utječe na procese odvoza smeća i rezultira ukupnom neučinkovitošću sustava. Stoga ove konverzije koristite samo kad je to potrebno.

Pogledajmo gore navedene razlike u tabelarnom obliku.

S.No koncepti Razlike
klasa struct
1 Re-iskoristivost Potpuno ponovna upotreba Nije ponovna upotreba
2 Vidljivost Sve funkcije klase su vidljive njegovim objektima Podaci objekta Objekta nisu vidljivi ostalim objektima iste Strukture
3 Prođi referentom i prođi po vrijednosti Koristi se referencom Upotrebe prolaze prema vrijednosti
4 baština Funkcije klase mogu se naslijediti po njezinim podrazredima; omogućuje nasljedstvo Nikad ne dopušta nasljedstvo
5 Zadana vidljivost Svi su članovi klase prema zadanim postavkama privatni Svi su članovi Strukture prema zadanom javni
6 Veličina kad je prazna Veličina praznog razreda je 1 bajt Veličina prazne Strukture je 0 bajta
7 Kolekcija smeća Kako se koristi prolazno reference, odvoz smeća moguć je Kako se koristi pass vrijednost, odvoz smeća nije moguć
8 Upravljanje memorijom Jednostavnost postupka odvoza smeća pomaže u učinkovitom upravljanju memorijom Manjak odvoza smeća rezultira lošim upravljanjem memorijom
9 graditelji Omogućuje konstruktorima svih vrsta, poput parametara sa ili bez Dopušta samo konstruirane parametre
10 Destructors Mogu ga koristiti Ne mogu ga koristiti
11 Inicijalizacija varijabli članova Omogućuje izravnu inicijalizaciju članskih varijabli Ne dopušta izravnu inicijalizaciju riječi varijabli člana
12 Izrada objekta Za vrijeme stvaranja objekta potrebno je koristiti ključnu riječ "novo" Za vrijeme stvaranja objekta nije moguće koristiti ključnu riječ "novo"
13 Kada koristiti? Bolje za veće i složenije objekte u kojima je potrebno nasljeđivanje Bolje za manje i jednostavnije predmete u kojima je nasljedstvo manje važno.

Skoro smo pokrili sve razlike između Klase i Strukture, a ako smatrate da nešto nedostaje, javite nam se. Učimo zajedno i maksimalno iskoristimo to znanje!