Forskel mellem klasse og struktur Forskel mellem

Anonim

Før vi forstår forskellen mellem klasse og struktur, bør vi kende nogle få grundlæggende begreber forbundet med dem. Uden forståelse af begreber er det svært at forstå forskellene mellem de to.

Hvad er klasse og objekt:

Dette er de to vigtige begreber i forbindelse med objektorienteret programmering, og de danner grundlaget for at indramme funktioner og data, der overføres til andre funktioner. For en bedre forståelse kan vi korrelere det til et egentligt eksempel. En klasse kan betragtes som en butik, og et objekt kan være en af ​​de enkelte, specifikke butikker som dagligvarer, papirvarer, frugt osv. Alle genstande deler de vigtigste egenskaber i hovedklassen - butikken - og igen objekterne kan have deres egne eksklusive egenskaber som et specifikt design, belysning osv. Gennem objekterne kan vi faktisk bruge klassen; de udgør forekomster af en klasse.

Syntaks af en klasse

Klasseslager {

offentlige strengtegninger;

offentlig streng design;

}

Syntaks af et objekt

Store købmand = Ny butik ();

Store brevpapir = ny butik ();

Hvad er en struktur?

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

struct grocery_entrance {

char entry_name [50];

int entrance_size;

} købmand_entrance;

Alle butikker kan bruge strukturen 'indgang' med individuelle navne og størrelser.

Hvad er arvelighed?

Det ligner hvordan en søn arver faderens ejendele og i sin tur kan sønnen også tilføje nogle andre egenskaber. Klassen kan enten være en base klasse eller en afledt klasse, hvor den førstnævnte kan tages som basis for at danne sidstnævnte. Den afledte klasse tilføjer få andre egenskaber for sig, bortset fra hvad det kommer fra baseklassen. Når vi overvejer ovenstående eksempel, kan købmanden stadig være afledt af en bestemt købmand, såsom XYZ købmand.

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

Hvordan adskiller de sig?

  • Genbrugelighed: Da klasser danner basisrammen, kan de genbruges; Strukturer er imidlertid individuelle elementer med specifikke egenskaber, så de ikke kan genbruges. For eksempel kan dagligvarebutiksklassen bruges til enhver form for købmandsbutik, men Struct grocery_entrance er specifik for det alene, og der er ingen grund til at genbruge den i andre klasser.
  • Synlighed: Alle funktioner i en klasse er offentligt tilgængelige for dets objekter.For eksempel har vi en funktion med navnet 'ting' under klassens 'butik'. Funktionen 'ting' er synlig for alle dens objekter, som f.eks. 'Købmand,' papirvarer 'osv. Sådan synlighed er ikke mulig med strukturer, da strukturens data er begrænset til sig selv og ikke synlig for andre strukturer. For at gøre tingene klart, kan vi sige, at dataene for 'grocery_entrance' ikke er offentligt synlige for alle andre butikker.
  • Pass ved Reference & Pass Value: Pass ved Reference sender kun hukommelsesstedet og ikke de faktiske data til funktionerne. Dette betyder, at når værdien ændres, afspejles ændringen i de tilsvarende funktioner. Pass for værdi, til gengæld, er bare at sende værdien til funktionen. I dette tilfælde vil en ændring i værdien efter den sendes ikke blive afspejlet i funktionen. Klassen bruger passere ved reference, og Struct bruger passerværdien.
  • Arv: Klasser kan yderligere arves for at danne underklasser, men strukturer kan ikke udnytte arv. For eksempel giver Class Store sine funktioner til underklassen 'købmand'. Men strukturen 'grocery_entrance' kan ikke arve nogen funktion. Vi kan sige, at der ikke er noget koncept som substructure her.
  • Standard synlighed: Alle medlemmer af en klasse opbevares som private enheder som standard, mens medlemmerne af en struktur som standard holdes som offentlige enheder.
  • Størrelsen af ​​en tom klasse og struktur: Klassen bruger en størrelse på 1 Byte, selvom den er tom, mens Struct aldrig bruger nogen hukommelse, når den er tom. Det betyder at vi kan sige, at størrelsen af ​​en tom struktur er lig med 0 bytes.
  • Affaldssamling: Affaldssamling er mulig med klasser, da de bruger pas ved reference. Derfor er det nemmere at gøre oprydning på et sted, hvor dataene er gemt. På den anden side er garbageindsamling ikke mulig med Struct, da den bruger pass for værdi og dataene spredes på forskellige steder.
  • Hukommelsesstyring: Fordi klasse tillader skraldesamlinger, er hukommelsesstyringen også effektiv; Det er dog ikke så effektivt med strukturer.
  • Constructor: En konstruktør initialiserer generelt klassen med bestemte specificerede værdier. Vi kan se på det som noget, der er initialiseret med værdier. Hvis en ny klasse skal oprettes, kaldes konstruktøren for at allokere hukommelse for den instans. Vi kan endda videregive værdier som argumenter, mens vi ringer til en konstruktør. Lad os komme til vores aktuelle diskussion nu. Klasser tillader konstruktører af alle typer, som med eller uden argumenter, mens strukturer kun tillader konstruktørerne argumenter, i. e. de parameteriserede konstruktorer.
  • Destructor: En destructor kaldes, når vi skal slette en forekomst af en klasse. Destruktoren sletter i sin tur det tilfælde og frigør hukommelsen. En klasse kan bruge en destructor, mens en struktur ikke kan.
  • Medlemsvariabler Initialisering: I klasser kan vi initialisere medlemsvariablerne direkte; En sådan initialisering er ikke mulig med strukturer.
  • Objektoprettelse: Den generelle syntaks for objektoprettelse i klasser er:

Demo obj = ny demo ();

Dette betyder, at vi skal bruge søgeordet "nyt", mens du opretter objekter i en klasse.Dette er ikke nødvendigt, når du opretter objekter af strukturer. Bare tag et kig på deres syntaks:

Demo obj;

Det virker perfekt selv uden søgeordet "nyt".

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

Da klasser er mere fleksible i at levere data og funktioner sammen, kan vi gå efter det, når de anvendte genstande er komplekse og store. I vores eksempel kan et indkøbscenter bruge klassens butik til at udtrykke systemet på en bedre måde. Strukturer er imidlertid begrænset til mindre genstande, da de er forholdsvis 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 måske hørt ordene 'boksning' og 'unboxing' for at konvertere en struktur til en klasse og omvendt. Selv om disse er effektive processer til at hjælpe os med konverteringen, skal de håndteres med forsigtighed. Da dette har direkte indflydelse på hukommelsesstederne, har der stor betydning for systemets ydeevne. Desuden påvirker det indsamlingsprocesserne for affald og resulterer i samlet system ineffektivitet. Brug derfor kun disse konverteringer, når det er nødvendigt.

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

S. Ingen Begreber Forskelle
Klasse Struktur
1 Genbrugelighed Helt genanvendelig Kan ikke genbruges
2 Synlighed < Alle funktioner i en klasse er synlige for dets objekter Dataene for et objekt af en struktur er ikke synlige for andre objekter af samme struktur 3
Passer ved Reference & passér efter værdi > Anvendelse Passer ved henvisning Anvendelser Passer ved værdi 4 Arv
Funktionerne i en klasse kan arves af sine underklasser; tillader arv Tillader aldrig arv 5 Standard Synlighed
Alle medlemmer af en Klasse er som standard Alle medlemmer af en Struct er som standard offentlige 6 Størrelse når tomt
Størrelsen på en tom klasse er 1 Byte Størrelsen af ​​den tomme struktur er 0 Bytes 7 Affaldssamling
Som det bruger passere ved reference, er affaldssamling mulig Som det bruger værdi for værdiforbrug, er det ikke muligt at opsamle affald 8 Hukommelsesstyring
Løsningen af ​​affaldsopsamlingsprocessen hjælper med effektiv hukommelsesstyring Manglen på affaldssamling resulterer i fattige hukommelsesstyring 9 Konstruktører
Tillader konstruktorer af alle typer, f.eks. med eller uden parametre Tillader kun parameteriserede konstruktorer 10 Destructors
Kan bruge det Kan ikke brug det 11 Medlemsvariabler Initialisering
Tillader direkte initialisering af medlemsvariabler tillader ikke direkte ordinitialisering af medlemsvariabler 12 < Objektoprettelse 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 du bruge? Bedre til større og komplekse objekter, hvor arv kræves.
Bedre til mindre og enklere genstande, hvor arv er af mindre betydning. Vi har næsten dækket alle forskellene mellem klasse og struktur, og hvis du føler at der mangler noget, så lad os vide det. Lad os lære sammen og få mest muligt ud af den viden!