Forskjellen mellom klasse og struktur

Før vi forstår forskjellen mellom klasse og struktur, bør vi vite noen grunnleggende konsepter knyttet til dem. Uten forståelse av begreper, er det vanskelig å forstå forskjellene mellom de to.

Hva er klasse og objekt:

Dette er de to viktige konseptene knyttet til Objektorientert Programmering, og de danner grunnlaget for innramming av funksjoner og data som overføres til andre funksjoner. For bedre forståelse kan vi korrelere det til et virkelighetseksempel. En klasse kan betraktes som en butikk, og et objekt kan være noen av de enkelte, spesifikke butikker som dagligvarebutikk, brevpapir, frukt, etc. Alle objekter deler de viktigste egenskapene til hovedklassen - butikken - og i sin tur, objektene kan ha sine egne eksklusive egenskaper som en bestemt design, lys, etc. Gjennom objektene kan vi faktisk bruke klassen; de danner forekomster av en klasse.

Syntaks av en klasse

Class Store

offentlige streng ting;

offentlig streng design;

Syntaks av et objekt

Lagre matbutikk = Ny butikk ();

Lagre brevpapir = ny butikk ();

Hva er en struktur?

En struktur inneholder bare dataene, og det er derfor nyttig å utforme de individuelle datakravene gjennom strukturobjektene. I motsetning til en klasse mangler det funksjoner. Her er dens syntaks:

struct matbutikk_entrance

char entry_name [50];

int entrance_size;

dagligvarebutikk;

Alle butikker kan bruke Struct 'inngang' med individuelle navn og størrelser.

Hva er arv?

Det ligner på hvordan en sønn arver farene sine, og i sin tur kan sønnen også legge til andre eiendeler av seg selv. Klassen kan enten være en baseklasse eller en avledet klasse, der den tidligere kan tas som basis for å danne sistnevnte. Den avledede klassen legger til få andre egenskaper for seg, bortsett fra hva det kommer fra baseklassen. Når vi vurderer eksemplet ovenfor, kan matbutikken fremdeles være avledet til en spesifikk matbutikk, for eksempel XYZ-butikk.

Nå som vi er kjent med de grunnleggende konseptene, kan vi gå inn i den faktiske forskjellen mellom klasse og struktur.

Hvordan skiller de seg?

  • Re-brukervennlighet: Da klasser danner grunnleggende rammeverk, kan de gjenbrukes; Strukturer er imidlertid enkelte elementer med spesifikke egenskaper, slik at de ikke kan brukes på nytt. For eksempel kan matbutikklassen brukes til hvilken som helst type matbutikk, men Struct grocery_entrance er spesifikk for det alene og det er ikke noe poeng i å bruke det i andre klasser.
  • Synlighet: Alle funksjonene i en klasse er offentlig tilgjengelige for sine objekter. For eksempel har vi en funksjon som heter 'ting' under klassen 'butikken'. Funksjonen 'ting' er synlig for alle dens objekter, for eksempel 'matbutikk', brevpapirbutikk ', etc. Slike synlighet er ikke mulig med strukturer, da strukturens data er begrenset til seg selv og ikke synlig for andre strukturer. For å gjøre det klart, kan vi si at dataene for 'grocery_entrance' ikke er offentlig synlig for alle andre butikker.
  • Pass ved referanse og pass av verdi: Pass ved referanse sender kun minnestedet og ikke de faktiske dataene til funksjonene. Dette betyr at når verdien endres, reflekteres endringen i de tilsvarende funksjonene. Pass på verdi, i sin tur, sender bare verdien til funksjonen. I dette tilfellet vil ikke en verdiendring etter at den sendes, reflekteres i funksjonen. Klassen bruker passord, og Struct bruker passord.
  • Arv: Klasser kan videre arves for å danne underklasser, men strukturer kan ikke bruke arv. For eksempel gir Class Store sine funksjoner til underklassen 'matbutikk'. Men Struct 'grocery_entrance' kan ikke arve noen funksjon. Vi kan si at det ikke er noe konsept som substructure her.
  • Standard synlighet: Alle medlemmer av en klasse holdes som private enheter som standard, mens medlemmer av en struktur holdes som offentlige enheter som standard.
  • Størrelsen på en tom klasse og struktur: Klassen bruker en størrelse på 1 Byte selv når den er tom, mens Struct aldri bruker noe minne når det er tomt. Dette betyr at vi kan si at størrelsen på en tom struktur er lik 0 Bytes.
  • Søppelsamling: Innsamling av søppel er mulig med klasser, ettersom de bruker passering ved referanse. Derfor er det enklere å gjøre opprydningen på ett sted der dataene er lagret. På den annen side er søppelkolleksjon ikke mulig med Struct, da den bruker pass for verdi og dataene er spredt på forskjellige steder.
  • Minnehåndtering: Fordi klassen tillater søppelsamlinger, er minnestyringen også effektiv; Det er imidlertid ikke så effektivt med strukturer.
  • konstruktør: En konstruktør initierer vanligvis klassen med bestemte spesifiserte verdier. Vi kan se på det som noe som har blitt initialisert med verdier. Hvis en ny klasse skal opprettes, kalles konstruktøren for å allokere minne for den forekomsten. Vi kan til og med passere verdier som argumenter mens du ringer til en konstruktør. La oss komme til vår aktuelle diskusjon nå. Klasser tillater konstruktører av alle typer, for eksempel med eller uten argumenter, mens strukturer bare tillater konstruktørene med argumenter, dvs. de parameteriserte konstruktørene.
  • Destructor: En destructor kalles når vi trenger å slette en forekomst av en klasse. Destructoren sletter i sin tur den forekomsten og frigjør minne. En klasse kan bruke en destructor, mens en struktur ikke kan.
  • Medlemsvariabler Initialisering: I klasser kan vi initialisere medlemsvariablene direkte; En slik initialisering er ikke mulig med strukturer.
  • Objektoppretting: Den generelle syntaksen for opprettelse av objekt i klasser er:

Demo obj = ny demo ();

Dette betyr at vi må bruke søkeordet "nytt" mens du lager objekter av en klasse. Dette er ikke nødvendig når du lager objekter av strukturer. Bare ta en titt på deres syntaks:

Demo obj;

Det fungerer perfekt selv uten søkeordet "nytt".

Når skal du bruke klasse og når du skal bruke struktur?

Som klasser er mer fleksible i å levere data og funksjoner sammen, kan vi gå for det når objektene som brukes er komplekse og store. I vårt eksempel kan et kjøpesenter bruke klassens butikk for å uttrykke systemet på en bedre måte. Strukturene er imidlertid begrenset til mindre gjenstander, da de er relativt mindre effektive enn klasser. Derfor, hvis du designer en egen butikk, er strukturer det bedre valget.

Slik konverterer du en struktur til en klasse og vice versa?

Du har kanskje hørt ordene 'boksing' og 'unboxing' for å konvertere en struktur til en klasse, og omvendt. Selv om disse er effektive prosesser for å hjelpe oss med konverteringen, bør de håndteres med forsiktighet. Da dette direkte påvirker minnesteder, har det stor innvirkning på ytelsen til systemet vårt. Videre påvirker det søppeloppsamlingsprosessene og resulterer i total system ineffektivitet. Bruk derfor disse konverteringene bare når det er nødvendig.

La oss se på ovennevnte forskjeller i tabellform.

S.No Begreper forskjeller
Klasse struct
1 Re-usability Helt gjenbrukbar Ikke gjenbrukbar
2 Synlighet Alle funksjonene i en klasse er synlige for gjenstandene Dataene for et objekt av en struktur er ikke synlige for andre objekter av samme struktur
3 Pass ved referanse og send etter verdi Bruker Pass ved referanse Bruker Passer etter verdi
4 Arv Funksjonene i en klasse kan arves av sine underklasser; tillater arv Tillater aldri arv
5 Standard Sikt Alle medlemmer av en klasse er som standard private Alle medlemmer av en struktur er som standard offentlig
6 Størrelse når tom Størrelsen på en tom klasse er 1 Byte Størrelsen på den tomme strukturen er 0 byte
7 Søppelsamling Som den bruker passere ved referanse, er søppelinnsamling mulig Som det bruker passerer for verdi, er søppelinnsamling ikke mulig
8 Minnehåndtering Den enkle søppelinnsamlingsprosessen bidrar til effektiv minnehåndtering Mangelen på søppelsamling resulterer i dårlig minnehåndtering
9 Constructors Tillater konstruktører av alle typer, for eksempel med eller uten parametere Tillater bare parameteriserte konstruktører
10 destructors Kan bruke den Kan ikke bruke den
11 Medlemsvariabler Initialisering Tillater direkte initialisering av medlemsvariabler Tillater ikke direkte ordinitialisering av medlemsvariabler
12 Objektoppretting Det er et must å bruke søkeordet "nytt" under opprettelsen av objekt Det er valgfritt å bruke søkeordet "nytt" under opprettelsen av objekt
1. 3 Når skal du bruke? Bedre for større og komplekse gjenstander der arv er nødvendig Bedre for mindre og enklere gjenstander hvor arv er mindre viktig.

Vi har nesten dekket alle forskjellene mellom klasse og struktur, og hvis du føler at noe mangler, vennligst gi oss beskjed. La oss lære sammen og få mest mulig ut av den kunnskapen!