Verschil tussen structuur en unie

Schrijver: Laura McKinney
Datum Van Creatie: 1 April 2021
Updatedatum: 15 Kunnen 2024
Anonim
Verzamelingenleer unie doorsnede verschil (O5 - ET 6.18)
Video: Verzamelingenleer unie doorsnede verschil (O5 - ET 6.18)

Inhoud


C ++ staat alle vijf manieren toe die de C-taal biedt om aangepaste gegevens te maken. Die vijf manieren zijn ‘structuur’, ‘bitveld’, ‘unie’, ‘opsomming’, ‘typedef’. In het onderstaande artikel gaan we het verschil tussen structuur en unie bestuderen. De structuur en de unie zijn beide gegevenstypes van de container die gegevens van elk "type" kunnen bevatten. Het enige grote verschil dat structuur en unie onderscheidt, is dat de structuur een afzonderlijke geheugenlocatie heeft voor elk van zijn leden, terwijl de leden van een unie dezelfde geheugenlocatie delen.

Laten we het verschil tussen structuur en unie begrijpen, samen met een vergelijkingstabel.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. overeenkomsten
  5. Gevolgtrekking

Vergelijkingstabel

VergelijkingsbasisStructuurUnie
basis-De afzonderlijke geheugenlocatie wordt toegewezen aan elk lid van de structuur.Alle leden van de vakbond delen dezelfde geheugenlocatie.
Verklaringstruct struct_name {
type element1;
type element2;
.
.
} variabele1, variabele2, ...;
union u_name {
type element1;
type element2;
.
.
} variabele1, variabele2, ...;
trefwoordstructunie
GrootteGrootte van structuur = som van de grootte van alle gegevensleden.Grootte van Unie = grootte van de grootste leden.
WinkelwaardeSlaat verschillende waarden op voor alle leden.Slaat dezelfde waarde op voor alle leden.
TegelijkertijdEen structuur slaat meerdere waarden van de verschillende leden van de structuur op.Een vakbond slaat één waarde per keer op voor alle leden.
Manier van bekijkenBieden één manier om elke geheugenlocatie te bekijken.Bieden meerdere manieren om dezelfde geheugenlocatie te bekijken.
Anonieme functieGeen anonieme functie.Anonieme unie kan worden verklaard.

Definitie van structuur

De structuur is een verzameling variabelen van verschillende gegevenstypen, waarnaar wordt verwezen met een gemeenschappelijke naam. De variabelen in een structuur worden "leden" genoemd. Standaard zijn alle leden van een structuur 'openbaar'. Wanneer u een structuur declareert, maakt u een sjabloon, die kan worden gebruikt om structuurobjecten te maken, die dezelfde organisatie van gegevensleden en ledenfuncties delen. De verklaring van de structuur wordt altijd voorafgegaan door het sleutelwoord "struct", dat de compiler vertelt dat een structuur is gedeclareerd. Laten we een voorbeeld nemen.


Laten we een voorbeeld nemen.

struct medewerker {stringnaam; tekenreeks bedrijfsnaam; string city; } EMP1, EMP2;

Hier verklaren we een structuur voor het opslaan van de informatie van de werknemers. De declaratie wordt beëindigd door een puntkomma, omdat structuurdeclaratie een instructie is en in C ++ de instructie wordt beëindigd door een puntkomma.

De naam die aan een structuur wordt gegeven, definieert een "type" (in bovenstaand voorbeeld is de naam van de structuur "medewerker"). De variabelen van deze typen kunnen worden gemaakt, zoals hierboven hebben we twee variabelen 'emp1' en 'emp2' van het type 'medewerker' gemaakt. In het bovenstaande voorbeeld hebben we een variabele 'structuur' gemaakt vlak na de aangifte; als alternatief kan het afzonderlijk worden gemaakt.

struct medewerker emp1, emp2; // de zoekwoordstructuur is niet verplicht.

De leden van een structuurvariabele kunnen worden geïnitialiseerd of kunnen worden geopend met de operator dot (.).


emp1.name = "ashok";

De informatie in een structuurvariabele kan worden toegewezen aan een andere structuurvariabele van hetzelfde type als volgen.

emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; EMP2 = EMP1; // waarden toewijzen van het lid van emp1 aan emp2. cout <

Hier hebben we de structuurvariabele ‘emp1 ′ toegewezen aan’ emp2 ′ dus, ’emp1 ′ kopieert alle waarde van zijn leden naar het overeenkomstige lid van‘ epm2 ’.

Het lid van de structuurvariabele kan aan de functie worden doorgegeven.

funct (emp1.city);

De gehele structuurvariabele kan aan de functie worden doorgegeven, zowel door de methoden call by value als call by reference.

funt (EMP1); // aanroepfunctie per call by value-methode. . . void funct (struct medewerker emp) {// receving waarden van leden van emp1. cout <

Hier zal de verandering in de waarde van een lid van de structuurvariabele niet worden weerspiegeld buiten de functie, aangezien een variabele wordt doorgegeven door call by value-methode. Laten we nu hetzelfde doen door de referentiemethode aan te roepen.

funt (& EMP1); // aanroepfunctie per aanroep door referentiemethode. . . void funct (struct medewerker * emp) {// receving adres van emp1. EMP> plaats = "Nur"; // verander de waarde van het lid (stad) van structuurvariabele emp1. . }

Hier wordt de structuurvariabele doorgegeven, dus verandering in de waarde van leden van de structuurvariabele weerspiegelt ook buiten de functie.

srtuct medewerker * emp; // ontkalken van de structuurwijzer van type medewerker. emp = & EMP1; // toewijzen van het adres van emp1 aan de aanwijzer. emp-> city // pointer die toegang heeft tot de aangesloten stad van emp1.

De aanwijzer naar de structuur kan ook worden gemaakt; het bevat het adres van de structuurvariabele.

In structuur is de geaggregeerde initialisatie toegestaan ​​wanneer de structuurdefinitie geen door de gebruiker gedefinieerde constructor of virtuele functies of basisklasse of privé of beschermd veld bevat.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Mogelijk omdat de structuur van de werknemer geen van bovengenoemde dingen bevat.

Definitie van Unie

Een unie is een geheugenlocatie die wordt gedeeld door twee of meer verschillende typen variabelen die worden gedeclareerd onder één unietype. Het sleutelwoord dat wordt gebruikt om een ​​vakbond aan te kondigen is "vakbond". In C ++ kan een unie zowel de ledenfunctie als variabelen bevatten. Standaard zijn alle leden van de vakbond "openbaar". Verklaring van de "unie" is vergelijkbaar met de verklaring van de structuur.

union u_type {int x, char c; zweven f; } u1, u2;

Hier hadden we een unie met de naam u_type verklaard. De leden van het u_type zijn ‘x’ van het type integer, ‘c’ van het karaktertype en ‘f’ van het float-type. We hadden ook de unievariabelen ‘u1’ en ‘u2’ van het type ‘u_type’ gemaakt, net na de verklaring van een unie. We kunnen de unievariabele ook los van de verklaring van een unie declareren.

int main () {union u_type u1, u2; // De trefwoordvereniging is niet verplicht in C ++. }

De toegang tot leden van de unie kan worden gedaan met behulp van de punt (.) Operator, voorafgegaan door unievariabele en gevolgd door het lid van die variabele.

u1.x = 10;

Net als structuren is de totale initialisatie niet mogelijk in een unie. Zoals we weten, deelt de unie dezelfde geheugenlocatie voor al zijn leden tegelijkertijd, wordt slechts één variabele geïnitialiseerd en wordt alle variabele automatisch bijgewerkt met de geïnitialiseerde waarde.

u1.x = 10; cout <

Als u probeert de waarde van een lid van ‘u1’ te wijzigen. Het andere lid wordt automatisch bijgewerkt naar die waarde.

u1.c = 65; cout <

De aan de vakbond toegewezen ruimte is gelijk aan de grootte van het grootste lid van de vakbond. Omdat de byte toegewezen aan ‘char’ 1 byte is, is ‘int’ 4 byte en ‘float’ 4 bytes, dus de grootste grootte is 4 byte. Het geheugen toegewezen aan ‘u1’ en ‘u2’ is dus 4 byte.

int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4

De aanwijzer naar de unie kan net als in structuur worden gemaakt. De aanwijzer bevat het adres van de vakbond.

union u_type * un; un = & u1; cout <X; // 10

Net als de structuur kan de unie ook worden doorgegeven aan de functies door zowel de methoden d.w.z. call by value als call by reference.

funct (u1); // aanroepfunctie per call by value-methode. . . void funct (union u_type un) {// receving de waarde van het lid van u1. cout <

Laten we nu de functie aanroepen met de methode call by reference.

funct (& u1); // aanroepfunctie door call by refrence-methode. . . void funct (union u_type un) {// receving het adres van u1. un-> x = 20. }

Er is een speciaal type unie in C ++ genaamd de Anonieme Unie ”. De anonieme unie kan niet de typenaam hebben en er kan geen variabele van een dergelijke unie worden gemaakt. Het is alleen om de compiler te vertellen dat zijn lidvariabelen dezelfde locatie moeten delen. De variabele van een anonieme unie kan worden gebruikt zonder de normale punt (.) Operator.

int main () {union {// definieer anonieme union zonder de typenaam. int x, char c; zweven f; }; x = 10; // verwees naar de unievariabele zonder puntoperator cout <

In anonieme unie is geen lidfunctie toegestaan, deze kan geen privé- of beschermde gegevens bevatten en de globale anonieme unie moet worden opgegeven als 'statisch'.

De punten om te onthouden voor de normale vakbondsverklaring.

  • De definitie van een unie kan ook constructor en destructor bevatten.
  • De unie biedt de verschillende manieren om dezelfde geheugenlocatie te bekijken.
  • De unie kan de klasse van geen enkel type erven.
  • De vakbond kan geen basisklasse zijn.
  • De unie kan niet de functie voor virtueel lid hebben.
  • De unie kan geen statische variabele hebben.
  1. De structuur gebruikt verschillende geheugenlocaties voor verschillende leden. Daarom kan de afzonderlijke waarde aan alle leden worden toegewezen. Maar de unie kent alle leden dezelfde geheugenlocatie toe. Daarom kan een enkele waarde aan alle leden worden toegewezen.
  2. De structuur heeft een verschillende geheugenlocatie voor alle leden; vandaar dat het meerdere waarden tegelijk kan bevatten en omdat we weten dat de unie dezelfde geheugenlocatie deelt voor alle leden, kan het dus een enkele waarde tegelijk opslaan.
  3. Over het algemeen is de totale grootte van de structuur groter dan de totale grootte van de unie omdat de grootte van een structuur de som is van de grootte van alle leden van de structuren en de grootte van de unie de grootte is van het lid van de grootste type.
  4. Structuur biedt één weergave van elke locatie, terwijl de unie meerdere weergaven biedt van één locatie.
  5. U kunt een anonieme unie verklaren, maar geen anonieme structuur.

overeenkomsten:

  • Zowel structuur als unie hebben dezelfde manier om zichzelf te verklaren, variabelen te creëren en dezelfde manier om toegang te krijgen tot leden van de variabelen.
  • Zowel structuur als unie kunnen worden doorgegeven aan een functie door zowel de methoden call by value als call by reference.
  • Zowel de structuur als de unie zijn van het gegevenstype van de container en bevatten een object van elk gegevenstype, inclusief andere structuur, unie, array als hun leden.

Gevolgtrekking:

Zowel structuur als unie zijn het containergegevenstype dat het lid van verschillende typen bevat. Maar structuren worden gebruikt wanneer we een duidelijke waarde moeten opslaan voor alle leden op een afzonderlijke geheugenlocatie. De vakbonden worden gebruikt wanneer typeconversie nodig is.