Forskjell mellom klasse og struktur Forskjellen mellom

Anonim

Før vi forstår forskjellen mellom klasse og struktur, bør vi vite noen grunnleggende begreper 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 å utforme funksjonene og dataene 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 strengtemaer;

offentlig strengdesign;

}

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 grocery_entrance {

char entry_name [50];

int entrance_size;

} dagligvarebutikk;

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

Hva er arvelighet?

Det ligner på hvordan en sønn arver farenes eiendeler, 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?

  • Gjenbrukbarhet: 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 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 benytte 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 medlemmene av en klasse holdes som private enheter som standard, mens medlemmene 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.
  • Innsamling av søppel: 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 det ikke mulig med søppelsamling med Struct, da den bruker pass for verdi, og dataene er spredt på forskjellige steder.
  • Minneadministrasjon: Fordi klassen tillater søppelsamlinger, er minnestyringen også effektiv; Det er imidlertid ikke så effektivt med strukturer.
  • Constructor: 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, i. e. de parameteriserte konstruktørene.
  • Destructor: En destructor kalles når vi må 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 objektopprettelse 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å til 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. Ingen Begreper Forskjeller
Klasse Struktur
1 Gjenbrukbarhet Fullstendig gjenbrukbar Ikke gjenbrukbar
2 Synlighet < Alle funksjonene i en klasse er synlige for objektene sine. Dataene til et objekt av en struktur er ikke synlige for andre objekter av samme struktur 3
Pass ved referanse og passere verdier > Bruksområder Pass ved referanse Bruk Passer Verdien 4 Arv
Funksjonene til en klasse kan arves av sine underklasser; tillater arv Tillater aldri arv 5 Standard Sikt
Alle medlemmer av en klasse er som standard Alle medlemmer av en Struct er som standard offentlig 6 Størrelse når tomt
Størrelsen på en tom klasse er 1 Byte Størrelsen på den tomme strukturen er 0 Bytes 7 Søppelsamling
Som det brukes ved referanse, er søppelinnsamling mulig Når det gjelder passord for verdi, er det ikke mulig å skille seg inn. 8 Minnehåndtering
Den enkle søppelinnsamlingsprosessen bidrar til effektiv minnehåndtering. Mangelen på søppelsamling fører til dårlig minneforvaltning 9 Konstruktører
Tillater konstruktører av alle typer, for eksempel med eller uten parametere Tillater bare parameteriserte konstruktører 10 Destructors
Kan bruke det Kan ikke bruk det 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 opprettelse av objekt
Det er valgfritt å bruke søkeordet "nytt" under opprettelse av objekt 13 Når skal du bruke? Bedre for større og komplekse gjenstander der arv er nødvendig
Bedre for mindre og enklere gjenstander der 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!