Skillnad mellan klass och struktur Skillnad mellan

Anonim

Innan vi förstår skillnaden mellan klass och struktur, borde vi känna till några grundläggande begrepp i samband 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 begrepp som är relaterade till objektorienterad programmering, och de utgör grunden för inramning av funktioner och data som överförs 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

Butikshandlare = 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 för att utforma de enskilda datakraven genom strukturobjekten. Till skillnad från en klass saknar den funktioner. Här är dess syntax:

struct grocery_entrance {

char entry_name [50];

int entrance_size;

} dagligvaruhandeln;

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 egendomar. 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-livsmedelsbutiken.

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ändbarhet: Eftersom klasser 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 alla typer av livsmedelsbutiker, men Struct grocery_entrance är specifikt för det enda 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.
  • Godkänn referens och överför 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 ärvs 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äpsamling: 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öjligt med Struct, eftersom den använder passera för värde och datan sprids på olika platser.
  • Minnehantering: Eftersom klassen tillåter sopsamlingar är minneshanteringen också effektiv. Det är dock inte så effektivt med strukturer.
  • Constructor: En konstruktör initierar generellt klassen med vissa angivna 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, till exempel med eller utan argument, medan strukturer endast tillåter konstruktörer med argument, i. e. 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 objektskapande 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. Titta bara på deras syntax:

Demo obj;

Det fungerar perfekt även utan nyckelordet "nytt".

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

Eftersom klasserna är mer flexibla när man levererar 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 konverterar man en struktur till en klass och vice versa?

Du kanske har hört villkoren "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. Ingen Koncept Skillnader
Klass Struktur
1 Återanvändbarhet Helt återanvändbar Ej återanvändbar
2 Synlighet < Alla funktioner i en klass är synliga för dess objekt Data för ett objekt av en struktur är inte synliga för andra föremål av samma struktur 3
Godkänn referens och överför värde > Användning Passera genom referens Användning Passera av värde 4 Erfarenhet
Funktionerna i en klass kan ärftas 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 vanliga som standard 6 Storlek när tomt
Storleken på en tom klass är 1 Byte Storleken på den tomma Strukturen är 0 Bytes 7 Sopkollektion
Eftersom det går att skicka genom referens är sopkollektion möjlig Det går inte att skräpa om sopor 8 Minnehantering
Den enkla insamlingsprocessen hjälper till med effektiv minneshantering Bristen på skräpuppsamling leder till dålig minneshantering 9 Konstruktörer
Tillåt konstruktörer av alla slag, till exempel med eller utan parametrar Tillåt endast parametrerade konstruktörer 10 Destructors
Kan använda det Kan inte använd det 11 Medlemsvariabler Initialisering
Tillåter direktinitialisering av medlemsvariabler Tillåt inte direktordinitiering av medlemsvariabler 12 < Objektskapande Det är ett måste att använda nyckelordet "nytt" vid skapandet av objekt
Det är valfritt att använda sökordet "nytt" vid skapandet av objekt 13 När ska man 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 tycker att något saknas, var snäll och fråga oss. Låt oss lära oss tillsammans och dra nytta av den kunskapen!