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.
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 ();
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.
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.
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'.
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.
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!