Forskellen mellem struktur og union

Forfatter: Laura McKinney
Oprettelsesdato: 1 April 2021
Opdateringsdato: 16 Kan 2024
Anonim
Road trip in the USA | Incredibly beautiful places - Arizona, Nevada, Utah and California
Video.: Road trip in the USA | Incredibly beautiful places - Arizona, Nevada, Utah and California

Indhold


C ++ tillader alle de fem måder, som C-sproget leverede til at oprette en brugerdefineret data. Disse fem måder er 'struktur', 'bit-felt', 'union', 'enumeration', 'typedef'. I nedenstående artikel skal vi undersøge forskellen mellem struktur og forening. Strukturen og sammenslutningen er begge containerdatetyper, der kan indeholde data af enhver ”type”. Den største forskel, der adskiller struktur og forening, er, at strukturen har en separat hukommelsesplacering for hvert af dens medlemmer, mens medlemmerne af en fagforening deler den samme hukommelsesplacering.

Lad os forstå forskellen mellem struktur og forening sammen med et sammenligningskort.

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. ligheder
  5. Konklusion

Sammenligningstabel

Grundlag for sammenligningStrukturUnion
GrundlæggendeDen separate hukommelsesplacering er tildelt hvert medlem af strukturen.Alle medlemmer af fagforeningen deler den samme hukommelsesplacering.
Erklæringstruct struct_name {
type element1;
type element2;
.
.
} variabel1, variabel2, ...;
union u_name {
type element1;
type element2;
.
.
} variabel1, variabel2, ...;
søgeordstructUnion
StørrelseStrukturstørrelse = summen af ​​størrelsen på alle datamedlemmer.Unionens størrelse = størrelse på de største medlemmer.
Store værdiGemmer forskellige værdier for alle medlemmer.Gemmer samme værdi for alle medlemmer.
På et tidspunktEn struktur gemmer flere værdier af de forskellige medlemmer af strukturen.En fagforening lagrer en enkelt værdi ad gangen for alle medlemmer.
Måde at se påGiv en enkelt måde at få vist hvert hukommelsessted.Giv flere måder at se den samme hukommelsesplacering på.
Anonym funktionIngen anonym funktion.Anonym union kan erklæres.

Definition af struktur

Strukturen er en samling af variabler af forskellige datatyper, der henvises til med et almindeligt navn. Variablerne i en struktur kaldes “medlemmer”. Som standard er alle medlemmer af en struktur "offentlig". Når du erklærer en struktur, opretter du en skabelon, der kan bruges til at oprette strukturobjekter, der deler den samme organisation af datamedlemmer og medlemsfunktioner. Erklæringen af ​​strukturen er altid foran med nøgleordet "struktur", der fortæller kompilatoren, at en struktur er blevet erklæret. Lad os tage et eksempel.


Lad os tage et eksempel.

struktur medarbejder {strengnavn; streng firma_navn; streng by; } EMP1, emp2;

Her erklærer vi en struktur til opbevaring af medarbejdernes oplysninger. Erklæringen afsluttes med et semikolon, da strukturdeklaration er en erklæring, og i C ++ afsluttes erklæringen med et semikolon.

Navnet, der er givet til en struktur, definerer en “type” (i eksemplet ovenfor er strukturen navn “medarbejder”). Variablerne af disse typer kunne oprettes, som ovenfor skabte vi to variabler 'emp1' og 'emp2' af typen "medarbejder". I ovenstående eksempel oprettede vi en 'struktur' -variabel lige efter erklæringen; skiftevis kan det oprettes separat.

struktur medarbejder emp1, emp2; // Nøgleordstrukturen er ikke obligatorisk.

Medlemmerne af en strukturvariabel kan initialiseres eller kan åbnes ved hjælp af dot (.) -Operatøren.

emp1.name = "ashok";

Oplysningerne indeholdt i en strukturvariabel kan tildeles en anden strukturvariabel af samme type som følger.


emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = EMP1; // tildeling af værdier for medlemmet af emp1 til emp2. cout <

Her tildelte vi strukturvariablen 'emp1' til 'emp2', så 'emp1' kopierer alle værdien af ​​dens medlemmer til det tilsvarende medlem af 'epm2'.

Medlemmet af strukturvariablen kan overføres til funktionen.

funct (emp1.city);

Hele strukturvariablen kan overføres til funktionen ved både metoderne opkald efter værdi og opkald ved henvisning.

funt (EMP1); // opkaldsfunktion ved opkald efter værdimetode. . . void funct (struktur medarbejder emp) {// receving værdier for medlemmer af emp1. cout <

Her vil ændringen til værdien af ​​et medlem af strukturvariablen ikke reflektere uden for funktionen, da en variabel sendes ved opkald efter værdimetode. Lad os gøre det samme ved at kalde op via en referencemetode.

funt (& EMP1); // opkaldsfunktion ved opkald efter referencemetode. . . void funct (struktur medarbejder * emp) {// receving address of emp1. EMP-> byen = "Nur"; // ændre værdien af ​​medlemmet (byen) for strukturvariablen emp1. . }

Her sendes strukturvariablen ved henvisning, så ændring til værdien af ​​medlemmer af strukturvariablen afspejler også uden for funktionen.

srtuct medarbejder * emp; // dekalering af strukturmarkøren for medarbejder af typen. emp = & EMP1; // tildele adressen til emp1 til markøren. emp-> city // -viseren adgang til empirens medlemsby.

Markøren til strukturen kan også oprettes; det har adressen på strukturvariablen.

I struktur er den samlede initialisering tilladt, når strukturdefinitionen ikke indeholder nogen brugerdefineret konstruktør eller virtuelle funktioner eller baseklasse eller privat eller beskyttet felt.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Mulig, da medarbejdernes struktur ikke indeholder nogle af de ovennævnte ting.

Definition af Union

En union er et hukommelsessted, der deles af to eller flere forskellige typer variabler, der er erklæret under en enkelt unionstype. Det nøgleord, der bruges til at erklære en fagforening, er ”fagforening”. I C ++ kan en union indeholde både medlemsfunktion og variabler. Som standard er alle medlemmer af fagforeningen "offentlige". Erklæringen om "fagforeningen" svarer til erklæringen om strukturen.

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

Her havde vi erklæret en fagforening, der hedder u_type. Medlemmerne af u_typen er 'x' af heltalstypen, 'c' af karaktertypen og 'f' af flydende type. Vi havde også oprettet unionsvariablerne 'u1' og 'u2' af typen 'u_type' lige efter erklæringen om en union. Vi kan også erklære unionens variabel separat fra erklæringen om en union.

int main () {union u_type u1, u2; // Nøgleordet union er ikke obligatorisk i C ++. }

Adgangen til medlemmer af fagforeningen kan ske ved at bruge dot (.) -Operatøren, forud for en union-variabel og fulgt medlemmet af den variabel.

u1.x = 10;

Ligesom strukturer er den samlede initialisering ikke mulig i en union. Som vi ved, deler unionen den samme hukommelsesplacering for alle dets medlem ad gangen, der initialiseres kun en variabel, og alle variablerne opdateres automatisk med den initialiserede værdi.

u1.x = 10; cout <

Hvis du prøver at ændre værdien af ​​et medlem af 'u1'. Det andet medlem opdateres automatisk til denne værdi.

u1.c = 65; cout <

Den plads, der er tildelt fagforeningen, er lig med størrelsen på det største medlem af fagforeningen. Da byten, der er tildelt 'char', er 1 byte, er 'int' 4 byte og 'float' er 4 byte, så den største størrelse er 4 byte. Så hukommelsen, der er tildelt 'u1' og 'u2', er 4 byte.

int main () {int size_1 = sizeof (u1); // 4 int størrelse_2 = størrelse af (u2); // 4

Markøren til unionen kan oprettes ligesom i struktur. Markøren holder adresse på unionen.

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

Ligesom struktur kan foreningen også overføres til funktionerne ved både metoderne, dvs. opkald efter værdi og opkald ved henvisning.

funct (u1); // opkaldsfunktion ved opkald efter værdimetode. . . void funct (union u_type un) {// receving værdien af ​​medlemmet af u1. cout <

Lad os nu kalde funktionen ved hjælp af opkald efter referencemetode.

funct (& u1); // opkaldsfunktion ved opkald efter opfriskningsmetode. . . void funct (union u_type un) {// receving af adressen til u1. un-> x = 20. }

Der er en særlig type fagforening i C ++ kaldet den anonyme union ”. Den anonyme fagforening kan ikke have typenavnet, og der kan ikke oprettes nogen variabel af en sådan forening. Det er kun at fortælle kompilatoren, at dens medlemsvariabler skal dele den samme placering. Variablen for en anonym union kan henvises uden den normale dot (.) Operatør.

int main () {union {// definere anonym union uden type-navn. int x, char c; flyde f; }; x = 10; // henvist til union variablen med out dot operator cout <

I anonym union er der ikke tilladt nogen medlemsfunktion, den kan ikke indeholde private eller beskyttede data, og den globale anonyme fagforening skal specificeres som 'statisk'.

De punkter, man skal huske på for den normale unionserklæring.

  • Definitionen af ​​en union kan også indeholde konstruktør og destruktør.
  • Forbundet giver flere måder at få vist den samme hukommelsesplacering.
  • Forbundet kan ikke arve klassen af ​​nogen type.
  • Unionen kan ikke være en baseklasse.
  • Forbundet kan ikke have den virtuelle medlemsfunktion.
  • Forbundet kan ikke have en statisk variabel.
  1. Strukturen bruger forskellige hukommelsesplaceringer til forskellige medlemmer. Derfor kan den forskellige værdi tildeles alle medlemmerne. Men fagforeningen tildeler det samme hukommelsessted til alle medlemmerne. Derfor kan en enkelt værdi tildeles alle medlemmerne.
  2. Strukturen har forskellige hukommelsesplaceringer for alle medlemmer; derfor kan den indeholde flere værdier ad gangen, og som vi ved, at unionen deler den samme hukommelsesplacering for alle medlemmerne, kan den derfor gemme en enkelt værdi ad gangen.
  3. Generelt er den samlede størrelse af strukturen større end den samlede størrelse af foreningen, fordi størrelsen på en struktur er summen af ​​størrelsen af ​​alle strukturerne, og størrelsen på foreningen er størrelsen på medlemmet af største type.
  4. Struktur giver en enkelt visning af hvert sted, mens foreningen giver de flere visninger af et enkelt sted.
  5. Du kan erklære en anonym fagforening, men ikke en anonym struktur.

ligheder:

  • Både struktur og union har den samme måde at erklære sig selv, skabe variabler og den samme måde at få adgang til medlemmer af variablerne.
  • Både struktur og forening kan overføres til en funktion ved både metoderne opkald efter værdi og opkald ved henvisning.
  • Både struktur og union er containerdatatype og indeholder et objekt af enhver datatype, herunder anden struktur, union, array som deres medlemmer.

Konklusion:

Både struktur og forening er containerdatatypen, der indeholder medlemmet af forskellige typer. Men strukturer bruges, når vi er nødt til at gemme forskellige værdier for alle medlemmerne i en bestemt hukommelsesplacering. Fagforeningerne bruges, når der er behov for typekonvertering.