Klasa i strukture

Anonim

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

Što je klasa i objekt:

To su dva važna koncepta povezana s programiranjem na objektu i čine osnovu za oblikovanje funkcija i prijenos podataka na druge funkcije. Za bolje razumijevanje, možemo ga povezati sa stvarnim primjerom. Klasa se može smatrati trgovinom, a neki objekt može biti bilo koji od pojedinačnih, specifičnih trgovina kao što su trgovina, prodavaonica, plod, itd. Svi objekti dijele zajednička svojstva glavne klase - trgovine - objekti mogu imati vlastita ekskluzivna svojstva kao što su određeni dizajn, rasvjeta itd. Kroz predmete možemo zapravo koristiti klasu; oni čine primjere klase.

Sintaksa klase

Klasa Store {

javni niz stvari;

dizajn javnih nizova;

}

Sintaksa objekta

Prodavaonica trgovine = nova trgovina ();

Trgovina Trgovina = nova trgovina ();

Što je struktura?

Struktura obuhvaća samo podatke, pa stoga korisno je u oblikovanju pojedinačnih zahtjeva za podatke putem strukturnih objekata. Za razliku od klase, nema funkcija. Evo njezine sintakse:

struct grocery_entrance {

char ulazni naziv [50];

int entry_size;

} grocery_entrance;

Sve trgovine mogu koristiti ulaz "Struct" s pojedinačnim nazivima i veličinama.

Što je nasljeđe?

Slično je kako sin nasljeđuje imetak svoga oca i, zauzvrat, sin također može dodati i neke svoje vlastite posjede. Klasa može biti bazna klasa ili izvedena klasa, u kojoj se bivša može uzeti kao baza za oblikovanje potonjeg. Dobivena klasa dodaje nekoliko drugih svojstava za sebe osim onoga što dobiva iz osnovne klase. Kada uzmemo u obzir gore navedeni primjer, trgovina mješovitom robom još uvijek može biti izvedena u određenu trgovinu, kao što je XYZ trgovina.

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

Kako se razlikuju?

  • Ponovno upotrebljivosti: Budući da klase čine osnovni okvir, mogu se ponovno upotrijebiti; Structs, međutim, su pojedinačni elementi s određenim svojstvima, pa se ne mogu ponovno koristiti. Na primjer, trgovina prehrambenih namirnica može se koristiti za bilo koju vrstu trgovine, ali struktura grocery_entrance je specifična za to sami i nema smisla ponovno ga koristiti u drugim razredima.
  • Vidljivost: Sve funkcije klase javno su dostupne svojim objektima. Na primjer, imamo funkciju pod nazivom "stvari" u klasi "trgovina". Funkcija "stvari" vidljiva je svim njegovim objektima, kao što su "trgovina mješovitom robom," tiskanica "itd. Takva vidljivost nije moguća s Structs jer su strukturni podaci ograničeni na sebe i nisu vidljivi drugim Structs. Kako bi stvari bile jasne, možemo reći da podaci 'grocery_entrance' nisu javno vidljivi svim ostalim trgovinama.
  • Proslijedi prema referenci i prolažite po vrijednosti: Pass by Reference šalje samo mjesta memorije, a ne stvarne podatke funkcijama. To znači da kad god se vrijednost promijeni, promjena se odražava u odgovarajućim funkcijama. Prosljeđivanje vrijednosti, zauzvrat, samo šalje vrijednost funkciji. U tom se slučaju promjena vrijednosti nakon slanja ne odražava u funkciji. Klasa koristi proći prema referenci, a Struct koristi prolaznu vrijednost.
  • Nasljeđivanje: Nastava se može dalje naslijediti u obliku podrazreda, ali Structs ne mogu koristiti nasljedstvo. Na primjer, Class Store daje svoje funkcije u pod-klasi "trgovina". No struktura 'grocery_entrance' ne može naslijediti nikakvu funkciju. Možemo reći da ovdje nema pojma poput podstrukture.
  • Zadana vidljivost: Svi članovi klase su zadani kao privatni subjekti, dok su članovi Struktura zadani kao javni subjekti.
  • Veličina prazne klase i strukture: Klasa koristi veličinu od 1 bajt čak i kada je prazna, dok Strukt nikada ne koristi memoriju kada je prazna. To znači da možemo reći da je veličina praznog grafikona jednaka 0 bajtova.
  • Kolekcija smeća: Sakupljanje smeća moguće je s razredima, jer se koriste kao referenca. Stoga je jednostavnije čišćenje na jednom mjestu gdje se podaci pohranjuju. S druge strane, s Structom nije moguće sakupljanje smeća jer upotrebljava prolaznu vrijednost i podaci se raspršuju na različitim lokacijama.
  • Upravljanje memorijom: Budući da klasa omogućuje zbirke smeća, upravljanje memorijom je također djelotvorno; međutim, to nije učinkovito s Structsom.
  • Konstruktor: Konstruktor općenito inicijalizira klasu s određenim određenim vrijednostima. Možemo ga pogledati kao nešto što je inicijalizirano s vrijednostima. Ako treba stvoriti novu klasu, konstruktor se poziva da alocira memoriju za tu instancu. Možemo čak i prosljeđivati ​​vrijednosti kao argumente tijekom pozivanja konstruktora. Dođite sada na našu stvarnu raspravu.Razredi omogućuju konstruktore svih tipova, kao što su sa ili bez argumenata, a strukture dopuštaju samo konstruktorima argumente, tj. Parametrirane konstruktore.
  • destructor: Razorac se zove kad god moramo izbrisati primjer klase. Destruktor, zauzvrat, briše taj slučaj i oslobađa memoriju. Klasa može koristiti razarač, a struktura ne može.
  • Inicijalizacija članova varijabli: U klase možemo inicijalizirati varijable člana izravno; takva inicijalizacija nije moguća s Structs.
  • Izrada objekta: Opća sintaksa za stvaranje objekta u razredima je:

Demo obj = novi Demo ();

To znači da moramo koristiti ključnu riječ "novo" tijekom stvaranja objekata klase. To nije potrebno pri stvaranju objekata Structs. Samo pogledajte njihovu sintaksu:

Demo obj;

Savršeno funkcionira čak i bez ključne riječi "novo".

Kada koristiti klasu i kada koristiti strukture?

Budući da su klase fleksibilnije u prenošenju podataka i funkcija zajedno, možemo to učiniti kada su upotrijebljeni objekti složeni i veliki. U našem primjeru, Mall može koristiti klasu "trgovina" kako bi izrazio sustav na bolji način. Structs, međutim, su ograničeni na manje objekte, jer su relativno manje učinkoviti od klase. Stoga, ako dizajnirate vlastitu trgovinu, Structs su bolji izbor.

Kako pretvoriti strukture u klase i vice versu?

Možda ste čuli pojmove 'boks' i 'unboxing' kako biste pretvorili Struct u klase i obrnuto. Iako su to učinkoviti postupci koji nam pomažu u obraćenju, trebali bi ih se postupati s oprezom. Budući da to izravno utječe na memorijske lokacije, postoji ogroman utjecaj na performanse našeg sustava. Štoviše, to utječe na postupke skupljanja smeća i rezultira ukupnom neučinkovitosti sustava. Zato upotrijebite ove konverzije samo kada je to potrebno.

Pogledajmo gore navedene razlike u tabličnom obliku.

S.No koncepti Razlike
klasa struct
1 Re-upotrebljivosti Potpuno ponovno iskoristivo Ne može se ponovno upotrebljavati
2 Vidljivost Sve funkcije klase su vidljive svojim objektima Podaci objekta Strukture nisu vidljivi drugim objektima iste strukture
3 Proslijedi prema referenci i proslijedi prema vrijednosti Koristi Pass by Reference Koristi Pass by Value
4 baština Funkcije klase mogu se naslijediti njezinim podrazredima; omogućuje nasljedstvo Nikada ne dopušta baštinu
5 Zadana vidljivost Svi članovi klase su prema zadanim postavkama privatni Prema zadanim postavkama svi su članovi strukture javni
6 Veličina kada je prazna Veličina prazne klase je 1 bajt Veličina praznih struktura je 0 bajta
7 Kolekcija smeća Kao što se koristi prolaze po referencu, smeće prikupljanje je moguće Budući da koristi prolaznu vrijednost, sakupljanje smeća nije moguće
8 Upravljanje memorijom Jednostavnost procesa sakupljanja smeća pomaže u učinkovitom upravljanju memorijom Nedostatak prikupljanja smeća dovodi do lošeg upravljanja pamćenjem
9 graditelji Omogućuje konstruktore svih vrsta, kao što su s ili bez parametara Dopušta samo parametriranim konstruktorima
10 Destructors Može ga koristiti Ne mogu ga koristiti
11 Inicijalizacija članova varijabli Omogućuje izravno inicijaliziranje varijabli članova Ne dopušta izravno inicijaliziranje varijabli članova
12 Stvaranje objekta Mora se upotrijebiti ključna riječ "novo" tijekom izrade objekta Neobavezno je koristiti ključnu riječ "novo" tijekom izrade objekta
13 Kada koristiti? Bolje za veće i složene objekte gdje je potrebno nasljeđivanje Bolje za manje i jednostavnije objekte gdje je baština manje važna.

Gotovo smo pokrivali sve razlike između klase i struktura, a ako smatrate da nešto nedostaje, javite nam. Učimo zajedno i iskoristimo to znanje!