Forskel mellem klasse og struktur

Inden vi forstår forskellen mellem klasse og struktur, bør vi kende et par grundlæggende koncepter, der er knyttet til dem. Uden forståelse af begreber er det vanskeligt at forstå forskellene mellem de to.

Hvad er klasse og objekt:

Dette er de to vigtige begreber, der er relateret til objektorienteret programmering, og de danner grundlaget for at indramme funktionerne og dataene, der overføres til andre funktioner. For en bedre forståelse kan vi sammenhænge det med et ægte eksempel. En klasse kan betragtes som en butik, og et objekt kan være en hvilken som helst af de enkelte, specifikke butikker såsom købmand, papirvarer, frugt osv. Alle objekter deler de fælles egenskaber for hovedklassen - butikken - og til gengæld objekterne kan have deres egne eksklusive egenskaber såsom et specifikt design, belysning osv. Gennem objekterne kan vi faktisk bruge klassen; de danner forekomsterne af en klasse.

Syntaks af en klasse

Klassebutik

ting til offentlig streng;

offentlig streng design;

Syntaks af et objekt

Butik købmand = ny butik ();

Store brevpapir = ny butik ();

Hvad er en struktur?

En struktur inkluderer kun dataene, og derfor er det nyttigt at udforme de individuelle datakrav gennem strukturobjekterne. I modsætning til en klasse mangler det funktioner. Her er dens syntaks:

struktur købmand_entrance

char indgangsnavn [50];

int indgangsstørrelse;

købmand_entrance;

Alle butikker kan bruge Struct 'indgangen' med individuelle navne og størrelser.

Hvad er arv?

Det svarer til, hvordan en søn arver sin fars besiddelser, og på sin side kan sønnen også tilføje nogle andre egne ejendele. Klassen kan enten være en baseklasse eller en afledt klasse, hvor førstnævnte kan tages som basen til at danne sidstnævnte. Den afledte klasse tilføjer få andre egenskaber for sig selv bortset fra hvad den får fra baseklassen. Når vi overvejer ovenstående eksempel, kan købmanden stadig afledes til en bestemt købmand, såsom XYZ købmand.

Nu hvor vi er bekendt med de grundlæggende koncepter, kan vi gå ind på den faktiske forskel mellem klasse og struktur.

Hvordan adskiller de sig?

  • Genanvendelighed: Da klasser danner de grundlæggende rammer, kan de genbruges; Strukturer er imidlertid individuelle elementer med specifikke egenskaber, så de kan ikke genbruges. F.eks. Kan dagligvarebutiksklassen bruges til enhver form for købmandsforretning, men strukturen købmandskoncentration er specifik for det alene, og der er ingen mening i at genbruge den i andre klasser.
  • Sigtbarhed: Alle funktioner i en klasse er offentligt tilgængelige for dens objekter. For eksempel har vi en funktion kaldet 'ting' under klassen 'butik'. Funktionen 'ting' er synlig for alle dens objekter, såsom 'købmand,' brevpapirbutik 'osv. En sådan synlighed er ikke mulig med Strukturer, da strukturs data er begrænset til sig selv og ikke synlige for andre strukturer. For at gøre tingene klare kan vi sige, at dataene om 'købmand_entrance' ikke er offentligt synlige for alle andre butikker.
  • Pass by Reference & Pass by Value: Pass by Reference sender kun hukommelsesplaceringen og ikke de faktiske data til funktionerne. Dette betyder, at hver gang værdien ændres, afspejles ændringen i de tilsvarende funktioner. Pass by value på sin side er bare at sende værdien til funktionen. I dette tilfælde afspejles en ændring i værdien, efter den er sendt, ikke i funktionen. Klasse bruger pass by reference, og Struktur bruger pass værdi.
  • Arv: Klasser kan arves yderligere for at danne underklasser, men strukturer kan ikke udnytte arv. F.eks. Giver Class Store sine funktioner til underklassen 'købmandsforretning'. Men strukturen 'købmandscentre' kan ikke arve nogen funktion. Vi kan sige, at der ikke er noget begreb som understruktur her.
  • Standard synlighed: Alle medlemmer af en klasse holdes som private enheder som standard, mens medlemmerne af en struktur holdes som offentlige enheder som standard.
  • Størrelsen på en tom klasse og struktur: Klasse bruger en størrelse på 1 Byte, selv når den er tom, mens Struct aldrig bruger nogen hukommelse, når den er tom. Dette betyder, at vi kan sige, at størrelsen på en tom struktur svarer til 0 byte.
  • Dagrenovation: Affaldsopsamling er mulig med klasser, da de bruger pass ved reference. Derfor er det lettere at gøre oprydningen på et sted, hvor dataene er gemt. På den anden side er det ikke muligt at indsamle affald med Struct, da det bruger pass-by-værdi, og dataene er spredt forskellige steder.
  • Hukommelsesadministration: Da klasse tillader affaldsindsamling, er hukommelsesstyringen også effektiv; det er dog ikke så effektivt med strukturer.
  • Konstruktør: En konstruktør initialiserer generelt klassen med visse specificerede værdier. Vi kan se på det som noget, der er initialiseret med værdier. Hvis der skal oprettes en ny klasse, kaldes konstruktøren til at allokere hukommelse til det tilfælde. Vi kan endda videregive værdier som argumenter, mens vi kalder en konstruktør. Lad os komme til vores faktiske diskussion nu. Klasser tillader konstruktører af alle typer, såsom med eller uden argumenter, mens strukturer kun tillader konstruktører med argumenter, dvs. de parametriserede konstruktører.
  • Destructor: En destructor kaldes hver gang vi har brug for at slette en forekomst af en klasse. Destruktoren sletter på sin side den instans og frigør hukommelse. En klasse kan bruge en destruktor, mens en struktur ikke kan.
  • Initialisering af medlemsvariabler: I klasser kan vi initialisere medlemsvariablerne direkte; en sådan initialisering er ikke mulig med Structs.
  • Oprettelse af objekt: Den generelle syntaks for objektskabelse i klasser er:

Demo obj = ny Demo ();

Dette betyder, at vi skal bruge nøgleordet 'nyt', mens vi opretter objekter i en klasse. Dette er ikke påkrævet, når du opretter objekter af strukturer. Bare kig på deres syntaks:

Demo obj;

Det fungerer perfekt selv uden nøgleordet 'nyt'.

Hvornår skal man bruge klasse og hvornår man skal bruge struktur?

Da klasser er mere fleksible i at dele data og funktioner sammen, kan vi gå til det, når de anvendte objekter er komplekse og store. I vores eksempel kan et indkøbscenter bruge klassen 'butik' til at udtrykke systemet på en bedre måde. Strukturer er imidlertid begrænset til mindre objekter, da de er relativt mindre effektive end klasser. Derfor, hvis du designer en egen butik, er strukturer det bedre valg.

Sådan konverteres en struktur til en klasse og vice versa?

Du har muligvis hørt udtrykkene 'boksning' og 'unboxing' for at konvertere en struktur til en klasse, og vice versa. Selvom dette er effektive processer, der hjælper os med konverteringen, skal de håndteres med forsigtighed. Da dette direkte påvirker hukommelsesplaceringerne, er der en enorm indflydelse på vores systems ydeevne. Derudover påvirker det affaldsindsamlingsprocesserne og resulterer i en generel ineffektivitet i systemet. Brug derfor kun disse konverteringer, når det er nødvendigt.

Lad os se på de ovennævnte forskelle i tabelform.

S.No Begreber Forskelle
klasse Struct
1 Genanvendelighed Fuld genanvendelig Ikke genanvendelig
2 Sigtbarhed Alle funktioner i en klasse er synlige for dens objekter Dataene til et objekt i en struktur er ikke synlige for andre objekter i den samme struktur
3 Pass by Reference & pass by Value Bruger Pass by Reference Bruger pass efter værdi
4 Arv Funktionerne i en klasse kan arves af dens underklasser; tillader arv Tillader aldrig arv
5 Standard synlighed Alle medlemmer af en klasse er som standard private Alle medlemmer af en struktur er som standard offentlige
6 Størrelse, når den er tom Størrelsen på en tom klasse er 1 Byte Størrelsen på den tomme struktur er 0 bytes
7 Dagrenovation Da det bruger pass by reference, er affaldsindsamling muligt Da det bruger pass-by-værdi, er affaldsindsamling ikke muligt
8 Hukommelsesadministration Letheden i affaldsindsamlingsprocessen hjælper med effektiv hukommelsesstyring Manglen på indsamling af affald resulterer i dårlig hukommelsesstyring
9 Constructors Tillader konstruktører af alle typer, f.eks. Med eller uden parametre Tillader kun parameteriserede konstruktører
10 destruktionsfunktioner Kan bruge det Kan ikke bruge det
11 Initialisering af medlemsvariabler Tillader direkte initialisering af medlemsvariabler Tillader ikke direkte ordinitialisering af medlemsvariabler
12 Oprettelse af objekt Det er et must at bruge nøgleordet 'nyt' under oprettelse af objekt Det er valgfrit at bruge nøgleordet 'nyt' under oprettelse af objekt
13 Hvornår skal bruges? Bedre til større og komplekse genstande, hvor arv kræves Bedre for mindre og enklere genstande, hvor arv er mindre vigtig.

Vi har næsten dækket alle forskellene mellem klasse og struktur, og hvis du føler, at der mangler noget, så fortæl os det. Lad os lære sammen og få mest muligt ud af denne viden!