Forskellen mellem struktur og union
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.
- Sammenligningstabel
- Definition
- Vigtige forskelle
- ligheder
- Konklusion
Sammenligningstabel
Grundlag for sammenligning | Struktur | Union |
---|---|---|
Grundlæggende | Den separate hukommelsesplacering er tildelt hvert medlem af strukturen. | Alle medlemmer af fagforeningen deler den samme hukommelsesplacering. |
Erklæring | struct struct_name { type element1; type element2; . . } variabel1, variabel2, ...; | union u_name { type element1; type element2; . . } variabel1, variabel2, ...; |
søgeord | struct | Union |
Størrelse | Strukturstørrelse = summen af størrelsen på alle datamedlemmer. | Unionens størrelse = størrelse på de største medlemmer. |
Store værdi | Gemmer forskellige værdier for alle medlemmer. | Gemmer samme værdi for alle medlemmer. |
På et tidspunkt | En 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 funktion | Ingen 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 < 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. 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.
ligheder:
Konklusion: