Skillnad mellan klass och struktur

Innan vi förstår skillnaden mellan klass och struktur, borde vi veta några grundläggande begrepp som är associerade med dem. Utan förståelse av begrepp är det svårt att förstå skillnaderna mellan de två.

Vad är klass och objekt:

Det här är de två viktiga begreppen i samband med objektorienterad programmering, och de utgör grunden för inramning av funktioner och data som övergår till andra funktioner. För en bättre förståelse kan vi korrelera det med ett verkligt exempel. En klass kan betraktas som en butik, och ett objekt kan vara någon av de enskilda, specifika butikerna som livsmedelsbutik, brevpapper, frukt etc. Alla objekt delar huvudklassens gemensamma egenskaper - butiken - och i sin tur, objekten kan ha sina egna exklusiva egenskaper som en specifik design, belysning etc. Genom objekten kan vi faktiskt använda klassen; de utgör förekomsten av en klass.

Syntax av en klass

Class Store

offentliga sträng saker;

allmän strängdesign

Syntax av ett objekt

Butik matbutik = ny butik ();

Store brevpapper = ny butik ();

Vad är en struktur?

En struktur innehåller endast data, och därför är det till hjälp vid utformningen av de enskilda datakraven genom strukturobjekten. Till skillnad från en klass saknar den funktioner. Här är dess syntax:

struct matbutik_entrance

char entrénamn [50];

int entrance_size;

matbutik_entrance;

Alla butiker kan använda strukturen "ingång" med enskilda namn och storlekar.

Vad är arv?

Det liknar hur en son ärver sin faders ägodelar och i sin tur kan sonen också lägga till några andra ägodelar. Klassen kan vara antingen en basklass eller en härledd klass, där den tidigare kan tas som bas för att bilda den senare. Den härledda klassen lägger till några andra egenskaper för sig, förutom vad det kommer från basklassen. När vi överväger ovanstående exempel kan mataffären fortfarande härledas till en viss mataffär, såsom XYZ livsmedelsbutik.

Nu när vi är bekanta med de grundläggande begreppen kan vi gå in i den faktiska skillnaden mellan klass och struktur.

Hur skiljer de sig?

  • Återanvändning: Eftersom klasserna utgör grundramen kan de återanvändas. Strukturer är emellertid enskilda element med specifika egenskaper, så de kan inte återanvändas. Till exempel kan mataffärsklassen användas för vilken typ av mataffär som helst, men Struct grocery_entrance är specifikt för det ensamma och det finns ingen mening att återanvända den i andra klasser.
  • Synlighet: Alla funktioner i en klass är offentligt tillgängliga för sina objekt. Till exempel har vi en funktion som heter "saker" under klassens butik. Funktionen "saker" är synlig för alla dess föremål, till exempel "livsmedelsbutik, brevaffär" etc. En sådan synlighet är inte möjlig med strukturer, eftersom strukturens data är begränsad till sig själv och inte synlig för andra strukturer. För att göra det klart kan vi säga att uppgifterna om "grocery_entrance" inte är offentligt synliga för alla andra butiker.
  • Passera av referens och passera efter värde: Passera av referens skickar endast minnesplatsen och inte den faktiska data till funktionerna. Detta innebär att när värdet ändras reflekteras ändringen i motsvarande funktioner. Passera för värde, i sin tur, sänder bara värdet till funktionen. I det här fallet kommer en ändring i värdet efter det att den skickas inte att återspeglas i funktionen. Klassanvändningar skickas genom referens, och Struct använder passvärde.
  • Arv: Klasser kan vidare ärftas för att bilda underklasser, men strukturer kan inte utnyttja arv. Till exempel ger Class Store sina funktioner till underklassen "mataffär". Men strukturen "grocery_entrance" kan inte ärva någon funktion. Vi kan säga att det inte finns något begrepp som substructure här.
  • Standard synlighet: Samtliga medlemmar i en klass hålls som privata enheter som standard, medan medlemmarna i en struktur som standard hålls som offentliga enheter.
  • Storleken på en tom klass och struktur: Klassen använder en storlek på 1 Byte även när den är tom, medan Struct aldrig använder något minne när det är tomt. Det betyder att vi kan säga att storleken på en tom struktur är lika med 0 Bytes.
  • Skräp samling: Skräpsamling är möjlig med klasser, eftersom de använder passera genom referens. Därför är det lättare att göra rengöringen på en plats där data lagras. Å andra sidan är insamling av sopor inte möjlig med Struct, eftersom den använder passera för värde och datan sprids på olika platser.
  • Minneshantering: Eftersom klassen tillåter sopsamlingar är minneshanteringen också effektiv; Det är dock inte så effektivt med strukturer.
  • Konstruktör: En konstruktör initierar generellt klassen med vissa specificerade värden. Vi kan titta på det som något som har initierats med värden. Om en ny klass måste skapas, kallas konstruktorn för att allokera minne för den instansen. Vi kan till och med överföra värden som argument när vi ringer till en konstruktör. Låt oss komma till vår aktuella diskussion nu. Klasser tillåter konstruktörer av alla typer, såsom med eller utan argument, medan strukturer endast tillåter konstruktorerna med argument, dvs de parametrerade konstruktörerna.
  • destructor: En destructor kallas när vi behöver ta bort en instans av en klass. Destruktorn tar i sin tur bort den förekomsten och frigör minne. En klass kan använda en destructor, medan en struktur inte kan.
  • Medlemsvariabler Initialisering: I klasser kan vi initialisera medlemsvariablerna direkt; En sådan initialisering är inte möjlig med strukturer.
  • Objektskapande: Den allmänna syntaxen för att skapa objekt i klasser är:

Demo obj = ny demo ();

Det betyder att vi måste använda sökordet "nytt" medan du skapar objekt i en klass. Detta behövs inte när du skapar objekt med strukturer. Ta en titt på deras syntax:

Demo obj;

Det fungerar perfekt även utan nyckelordet "nytt".

När ska du använda klass och när du ska använda struktur?

Eftersom klasserna är mer flexibla vid leverans av data och funktioner tillsammans kan vi gå till det när objekten som används är komplexa och stora. I vårt exempel kan ett galleri använda klassens butik för att uttrycka systemet på ett bättre sätt. Strukturer är dock begränsade till mindre föremål, eftersom de är relativt mindre effektiva än klasser. Därför, om du designer en egen butik, är strukturer det bättre valet.

Hur man konverterar en struktur till en klass och vice versa?

Du kanske har hört termen "boxning" och "unboxing" för att konvertera en struktur till en klass och vice versa. Även om dessa är effektiva processer för att hjälpa oss i omvandlingen, bör de hanteras med försiktighet. Eftersom detta direkt påverkar minnesplatserna har det stor inverkan på systemets prestanda. Dessutom påverkar det insamlingsprocesserna och resulterar i övergripande ineffektivitet i systemet. Använd därför dessa omvandlingar endast vid behov.

Låt oss se på ovan nämnda skillnader i tabellform.

S.No begrepp skillnader
Klass Struct
1 Återanvändning Helt återanvändbar Ej återanvändbar
2 Synlighet Alla funktioner i en klass är synliga för dess föremål Data för ett objekt av en struktur är inte synligt för andra objekt i samma struktur
3 Godkänn referens och överför värde Använder välj genom referens Använder Vara efter värde
4 Arv Funktionerna i en klass kan arvas av dess underklasser; tillåter arv Tillåter aldrig arv
5 Standard synlighet Alla medlemmar i en klass är privata som standard Alla medlemmar av en struktur är som standard offentliga
6 Storlek när tom Storleken på en tom klass är 1 Byte Storleken på den tomma strukturen är 0 Bytes
7 Skräp samling Som det används skickas genom referens, sopor insamling är möjlig Eftersom det använder passera för värde, är det inte möjligt att skräpuppsamling
8 Minneshantering Den enkla insamlingsprocessen hjälper till med effektiv minneshantering Bristen på sophämtning resulterar i dålig minneshantering
9 konstruktörer Tillåt konstruktörer av alla typer, till exempel med eller utan parametrar Tillåter endast parametrerade konstruktörer
10 destruktorer Kan använda den Kan inte använda den
11 Medlemsvariabler Initialisering Tillåter direktinitiering av medlemsvariabler Tillåt inte direktordinitiering av medlemsvariabler
12 Objektskapande Det är ett måste att använda sökordet "nytt" under objektskapande Det är frivilligt att använda sökordet "nytt" vid skapandet av objekt
13 När ska du använda? Bättre för större och komplexa föremål där arv krävs Bättre för mindre och enklare objekt där arv är av mindre betydelse.

Vi har nästan täckt alla skillnader mellan klass och struktur, och om du känner att något saknas, var snäll och fråga oss. Låt oss lära oss tillsammans och dra nytta av den kunskapen!