Verschil tussen Klasse en Structuur

Voordat we het verschil tussen klasse en structuur begrijpen, moeten we een aantal basisbegrippen kennen die hiermee verband houden. Zonder een begrip van concepten, is het moeilijk om de verschillen tussen de twee te begrijpen.

Wat is klasse en object:

Dit zijn de twee belangrijke concepten met betrekking tot objectgeoriënteerd programmeren en ze vormen de basis voor het inlijsten van de functies en gegevensoverdracht naar andere functies. Voor een beter begrip kunnen we dit correleren met een realistisch voorbeeld. Een klasse kan als een winkel worden beschouwd en een object kan een van de individuele, specifieke winkels zijn, zoals een supermarkt, briefpapier, fruit, enz. Alle objecten delen de gemeenschappelijke eigenschappen van de hoofdklasse - de winkel - en beurtelings de objecten kunnen hun eigen exclusieve eigenschappen hebben, zoals een specifiek ontwerp, verlichting, enz. Door de objecten kunnen we de klasse daadwerkelijk gebruiken; ze vormen de voorbeelden van een klasse.

Syntaxis van een klasse

Class Store

openbare string dingen;

openbaar snaarontwerp;

Syntaxis van een object

Winkel boodschappen bewaren = nieuwe winkel ();

Store Stationery = nieuwe winkel ();

Wat is een structuur?

Een structuur bevat alleen de gegevens en daarom is het handig bij het bepalen van de individuele gegevensvereisten via de structuurobjecten. In tegenstelling tot een klasse ontbreken functies. Hier is de syntaxis:

struct grocery_entrance

char entrance_name [50];

int entrance_size;

grocery_entrance;

Alle winkels kunnen de 'ingang' van de structuur gebruiken met individuele namen en formaten.

Wat is overerving?

Het is vergelijkbaar met hoe een zoon de bezittingen van zijn vader erft en op zijn beurt kan de zoon ook nog wat andere bezittingen van hemzelf toevoegen. De klasse kan een basisklasse zijn of een afgeleide klasse, waarbij de klasse kan worden gebruikt als basis om de klasse te vormen. De afgeleide klasse voegt enkele andere eigenschappen voor zichzelf toe, afgezien van wat deze uit de basisklasse krijgt. Als we het bovenstaande voorbeeld bekijken, kan de supermarkt nog steeds worden afgeleid van een specifieke supermarkt, zoals de XYZ-supermarkt.

Nu we bekend zijn met de basisbegrippen, kunnen we ingaan op het werkelijke verschil tussen Klasse en Structuur.

Hoe verschillen ze?

  • Re-usability: Aangezien klassen het basisraamwerk vormen, kunnen ze opnieuw worden gebruikt; Structuren zijn echter afzonderlijke elementen met specifieke eigenschappen, zodat ze niet opnieuw kunnen worden gebruikt. De supermarktklasse kan bijvoorbeeld voor elk type supermarkt worden gebruikt, maar de structuur grocery_entrance is specifiek daarvoor en het heeft geen zin om deze in andere klassen opnieuw te gebruiken..
  • Zichtbaarheid: Alle functies in een klasse zijn openbaar beschikbaar voor de objecten. We hebben bijvoorbeeld een functie met de naam 'dingen' onder de klasse 'winkel'. De functie 'dingen' is zichtbaar voor al zijn objecten, zoals 'supermarkt,' kantoorboekwinkel ', enzovoort. Zulke zichtbaarheid is niet mogelijk met Structs omdat de gegevens van struct beperkt zijn tot zichzelf en niet zichtbaar zijn voor andere structuren. Om de zaken duidelijk te maken, kunnen we zeggen dat de gegevens van 'grocery_entrance' niet publiekelijk zichtbaar zijn voor alle andere winkels.
  • Pass by Reference & Pass by Value: Doorgeven door verwijzing is het verzenden van alleen de geheugenlocatie en niet de feitelijke gegevens naar de functies. Dit betekent dat wanneer de waarde verandert, de wijziging wordt weerspiegeld in de bijbehorende functies. Pass by value stuurt op zijn beurt alleen de waarde naar de functie. In dit geval wordt een wijziging in de waarde nadat deze is verzonden, niet weergegeven in de functie. Klasse gebruikt pass-by-referentie, en Structuur gebruikt pass-waarde.
  • Erfenis: Klassen kunnen verder worden overgenomen om subklassen te vormen, maar Structs kunnen overerving niet gebruiken. De Class Store geeft bijvoorbeeld zijn functies door aan de subklasse 'supermarkt'. Maar de structuur 'grocery_entrance' kan geen enkele functie overnemen. We kunnen zeggen dat er geen concept-achtige onderstructuur is.
  • Standaard zichtbaarheid: Alle leden van een klasse worden standaard als privé-entiteiten bewaard, terwijl de leden van een structuur standaard als openbare entiteiten worden bewaard.
  • De grootte van een lege klasse en structuur: Class gebruikt een grootte van 1 byte, zelfs als deze leeg is, terwijl Struct nooit geheugen gebruikt als deze leeg is. Dit betekent dat we kunnen zeggen dat de grootte van een leeg struct 0 bytes is.
  • Garbage collection: Garbage collection is mogelijk met Classes, omdat ze pass-by-referentie gebruiken. Daarom is het eenvoudiger om de opruiming uit te voeren op één locatie waar de gegevens zijn opgeslagen. Aan de andere kant is garbage collection niet mogelijk met Struct, omdat het gebruik maakt van pass-by value en de gegevens op verschillende locaties worden verspreid.
  • Geheugen management: Omdat Class garbagecollecties toestaat, is het geheugenbeheer ook effectief; het is echter niet zo effectief met Structs.
  • constructor: Een constructor initialiseert de klasse in het algemeen met bepaalde opgegeven waarden. We kunnen ernaar kijken als iets dat is geïnitialiseerd met waarden. Als er een nieuwe klasse moet worden gemaakt, wordt de constructor aangeroepen om geheugen voor die instantie toe te wijzen. We kunnen zelfs waarden doorgeven als argumenten terwijl we een constructeur aanroepen. Laten we nu naar onze feitelijke discussie komen. Klassen maken constructors van alle soorten mogelijk, zoals met of zonder argumenten, terwijl structs alleen de constructors met argumenten toestaan, d.w.z. de geparameteriseerde constructors.
  • destructor: Een destructor wordt opgeroepen wanneer we een instantie van een klasse moeten verwijderen. De destructor verwijdert op zijn beurt dat exemplaar en maakt geheugen vrij. Een klasse kan een destructor gebruiken, terwijl een structuur dat niet kan.
  • Lidvariabelen Initialisatie: In klassen kunnen we de lidvariabelen direct initialiseren; een dergelijke initialisatie is niet mogelijk met Structs.
  • Object Creatie: De algemene syntaxis voor het maken van objecten in klassen is:

Demo obj = nieuwe demo ();

Dit betekent dat we het zoekwoord 'nieuw' moeten gebruiken tijdens het maken van objecten van een klasse. Dit is niet vereist bij het maken van objecten van Structs. Kijk maar eens naar hun syntaxis:

Demo obj;

Het werkt perfect, zelfs zonder het trefwoord 'nieuw'.

Wanneer gebruik ik de klasse en wanneer moet ik de structuur gebruiken??

Omdat Klassen flexibeler zijn in het gezamenlijk overdragen van gegevens en functies, kunnen we ervoor kiezen wanneer de gebruikte objecten complex en groot zijn. In ons voorbeeld kan een Mall de klasse 'store' gebruiken om het systeem op een betere manier uit te drukken. Structuren zijn echter beperkt tot kleinere objecten, omdat ze relatief minder effectief zijn dan klassen. Daarom, als u een eigen winkel ontwerpt, zijn structuren de betere keuze.

Hoe een structuur naar een klasse en vice versa te converteren?

Je hebt misschien de termen 'in dozen doen' en 'unboxing' gehoord om een ​​structuur in een klasse om te zetten en omgekeerd. Hoewel dit effectieve processen zijn om ons te helpen bij de conversie, moeten ze voorzichtig worden behandeld. Omdat dit rechtstreeks van invloed is op de geheugenlocaties, heeft dit een enorme impact op de prestaties van ons systeem. Bovendien beïnvloedt het de garbage collection-processen en resulteert het in algehele systeeminefficiëntie. Gebruik deze conversies daarom alleen als dat nodig is.

Laten we de bovengenoemde verschillen in tabelvorm bekijken.

S.No Concepts verschillen
Klasse struct
1 Re-usability Volledig herbruikbaar Niet herbruikbaar
2 Zichtbaarheid Alle functies van een klasse zijn zichtbaar voor zijn objecten De gegevens van een object van een structuur zijn niet zichtbaar voor andere objecten van dezelfde structuur
3 Doorgeven door verwijzing & doorgeven door waarde Gebruikt pass-by-referentie Gebruikt Pass by Value
4 Erfenis De functies van een klasse kunnen worden overgenomen door de subklassen; maakt overerving mogelijk Laat nooit erfenis toe
5 Standaard zichtbaarheid Alle leden van een klasse zijn standaard privé Alle leden van een structuur zijn standaard openbaar
6 Grootte wanneer leeg De grootte van een lege klasse is 1 byte De grootte van de lege structuur is 0 bytes
7 Garbage Collection Omdat het gebruik van pass-by-referentie, garbage collection is mogelijk Omdat gebruik wordt gemaakt van pass-by value, is garbage collection niet mogelijk
8 Geheugen management Het gemak van het garbage collection-proces helpt bij effectief geheugenbeheer Het ontbreken van garbagecollection resulteert in slecht geheugenbeheer
9 constructors Staat constructeurs van alle soorten toe, zoals met of zonder parameters Staat alleen geparameteriseerde constructors toe
10 destructors Kan het gebruiken Ik kan het niet gebruiken
11 Initialisatie van lidvariabelen Maakt directe initialisatie van lidvariabelen mogelijk Rechtstreekse woordinitialisatie van lidvariabelen is niet toegestaan
12 Object creatie Het is een must om het trefwoord 'nieuw' te gebruiken tijdens het maken van een object Het is optioneel om het trefwoord 'nieuw' te gebruiken tijdens het maken van een object
13 Wanneer te gebruiken? Beter voor grotere en complexe objecten waar overerving vereist is Beter voor kleinere en eenvoudigere objecten waar erfenis van minder belang is.

We hebben bijna alle verschillen tussen Class en Struct opgelost en als u denkt dat er iets ontbreekt, laat het ons dan weten. Laten we samen leren en het meeste uit die kennis halen!