Forskjellen mellom struktur og union

Forfatter: Laura McKinney
Opprettelsesdato: 1 April 2021
Oppdater Dato: 12 Kan 2024
Anonim
Møt kraftverksoperatør Raymond i FKF
Video: Møt kraftverksoperatør Raymond i FKF

Innhold


C ++ tillater alle de fem måtene C-språket ga for å lage en tilpasset data. De fem måtene er ‘struktur’, ‘bit-felt’, ‘union’, ‘enumeration’, ‘typedef’. I artikkelen nedenfor skal vi studere forskjellen mellom struktur og forening. Strukturen og sammenslåingen er begge containerdatatypene som kan inneholde data av hvilken som helst “type”. Den viktigste forskjellen som skiller struktur og forening, er at strukturen har et separat minneplass for hvert av medlemmene, mens medlemmene i en fagforening har samme minneplassering.

La oss forstå forskjellen mellom struktur og forening, sammen med et sammenligningskart.

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. likheter
  5. Konklusjon

Sammenligningstabell

Grunnlag for sammenligningStrukturUnion
grunn~~POS=TRUNCDen separate minneplasseringen tildeles hvert medlem av strukturen.Alle medlemmer av forbundet deler den samme minneplassen.
Erklæringstruct struct_name {
type element1;
type element2;
.
.
} variabel1, variabel2, ...;
union u_name {
type element1;
type element2;
.
.
} variabel1, variabel2, ...;
søkeordstructunion
StørrelseStrukturstørrelse = summen av størrelsen på alle datamedlemmene.Størrelse på unionen = størrelsen på de største medlemmene.
ButikkverdiLagrer forskjellige verdier for alle medlemmene.Lagrer samme verdi for alle medlemmene.
Om gangenEn struktur lagrer flere verdier, for de forskjellige medlemmene, av strukturen.En fagforening lagrer en verdi om gangen for alle medlemmer.
Måten å se påGi en enkelt måte å vise hvert minneplass.Gi flere måter å vise samme minneplassering på.
Anonym funksjonIngen anonym funksjon.Anonym forening kan erklæres.

Definisjon av struktur

Strukturen er en samling av variabler av forskjellige datatyper, som blir referert med et vanlig navn. Variablene i en struktur kalles “medlemmer”. Som standard er alle medlemmene i en struktur "offentlige". Når du erklærer en struktur, oppretter du en mal som kan brukes til å lage strukturobjekter, og deler den samme organisasjonen av datamedlemmer og medlemsfunksjoner. Deklarasjonen av strukturen er alltid foran med nøkkelordet "struktur", som forteller kompilatoren at en struktur er blitt erklært. La oss ta et eksempel.


La oss ta et eksempel.

strukt medarbeider {strengnavn; streng selskapets navn; streng by; } Emp1, emp2;

Her erklærer vi en struktur for lagring av informasjonen til de ansatte. Erklæringen avsluttes av et semikolon, da strukturdeklarasjon er en uttalelse, og i C ++ blir uttalelsen avsluttet med et semikolon.

Navnet gitt til en struktur definerer en “type” (i eksemplet over er navnet på strukturen “ansatt”). Variablene av disse typene kan opprettes, som ovenfor opprettet vi to variabler 'emp1' og 'emp2' av typen “ansatt”. I eksemplet ovenfor opprettet vi en ‘struktur’ -variabel like etter erklæringen; alternativt kan det opprettes separat.

struktur medarbeider emp1, emp2; // nøkkelordstrukturen er ikke obligatorisk.

Medlemmene av en strukturvariabel kan initialiseres eller kan nås ved å bruke dot (.) -Operatøren.

emp1.name = "Ashok";

Informasjonen i en strukturvariabel kan tilordnes en annen strukturvariabel av samme type som følger.


emp1.name = "Ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // tilordne verdier av medlemmet av emp1 til emp2. cout <

Her tildelte vi strukturvariabelen 'emp1 ′ til' emp2 ′ så, 'emp1 ′ kopierer all verdien av medlemmene til det tilsvarende medlemmet av' epm2 '.

Medlemmet av strukturvariabelen kan føres til funksjonen.

funksjo (emp1.city);

Hele strukturvariabelen kan føres til funksjonen, både av metodene samtale etter verdi og anrop ved referanse.

Funt (emp1); // anropsfunksjon etter anrop etter verdimetode. . . void funct (struktur ansattes emp) {// få verdier til medlemmer av emp1. cout <

Her vil endringen til verdien av et medlem av strukturvariabelen ikke reflektere utenfor funksjonen ettersom en variabel sendes med call by value-metoden. La oss gjøre det samme ved å ringe etter referansemetode.

Funt (& emp1); // samtalefunksjon ved samtale etter referansemetode. . . void funct (struktur ansatt * emp) {// receving address of emp1. emp-> city = "Nur"; // endre verdien på medlemmet (byen) på strukturvariabelen emp1. . }

Her sendes strukturvariabelen ved henvisning, og endring til verdien av medlemmene i strukturvariabelen reflekterer også utenfor funksjonen.

srtuct ansatt * emp; // dekalering av strukturpekeren til typen ansatt. emp = & emp1; // tilordne adressen til emp1 til pekeren. emp-> city // pointer som får tilgang til empirens medlemsby.

Pekeren til strukturen kan også opprettes; det holder adressen til strukturen variabel.

I struktur er samlet initialisering tillatt når strukturdefinisjonen ikke inneholder noen brukerdefinerte konstruktører eller virtuelle funksjoner eller baseklasse eller privat eller beskyttet felt.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Mulig ettersom strukturen til den ansatte ikke inneholder noen av tingene som er nevnt ovenfor.

Definisjon av Union

En union er et minneplass som deles av to eller flere forskjellige typer variabler som er erklært under en enkelt unionstype. Nøkkelordet som brukes til å erklære en fagforening er "fagforening". I C ++ kan en forening inneholde både medlemsfunksjon og variabler. Som standard er alle medlemmene i forbundet “offentlige”. Erklæringen om "fagforeningen" tilsvarer erklæringen om strukturen.

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

Her hadde vi erklært en fagforening som heter u_type. Medlemmene av u_typen er ‘x’ av heltallstypen, ‘c’ av karaktertypen og ‘f’ av flytetypen. Vi hadde også laget unionsvariablene ‘u1’ og ‘u2’, av ‘u_type’ type, rett etter erklæringen om en union. Vi kan også erklære fagforeningsvariabelen separat fra erklæringen om en fagforening.

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

Tilgangen til medlemmer av fagforeningen kan gjøres ved å bruke dot (.) -Operatør, forut av fagforeningsvariabel og fulgt medlemmet av den variabelen.

u1.x = 10;

I likhet med strukturer er den samlede initialiseringen ikke mulig i en fagforening. Som vi vet, har unionen samme minneplassering for alle medlemmene av gangen, bare en variabel blir initialisert og alle variablene oppdateres automatisk med initialisert verdi.

u1.x = 10; cout <

Hvis du prøver å endre verdien til et medlem av 'u1'. Det andre medlemmet blir automatisk oppdatert til den verdien.

u1.c = 65; cout <

Plassen som er tildelt fagforeningen er lik størrelsen til det største medlemmet i forbundet. Ettersom byten som er tilordnet ‘char’ er 1 byte, er ‘int’ 4 byte og ‘float’ er 4 byte, så den største størrelsen er 4 byte. Så minnet som er tilordnet ‘u1’ og ‘u2’ er 4 byte.

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

Pekeren til forbundet kan opprettes akkurat som i struktur. Pekeren holder adressen til forbundet.

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

I likhet med strukturen kan foreningen også overføres til funksjonene ved både metodene, dvs. ringe etter verdi og ringe ved referanse.

funksjo (u1); // anropsfunksjon etter anrop etter verdimetode. . . void funct (union u_type un) {// receving verdien av medlemmet til u1. cout <

La oss kalle funksjonen ved å bruke samtale etter referansemetode.

funksjo (og u1); // samtalefunksjon ved samtale etter oppfriskningsmetode. . . void funct (union u_type un) {// henter adressen til u1. un-> x = 20. }

Det er en spesiell type fagforening i C ++ som kalles Anonymous Union. Den anonyme foreningen kan ikke ha typen navn, og ingen variabel av en slik forening kan opprettes. Det er bare for å fortelle kompilatoren at dens medlemsvariabler skal dele samme sted. Variabelen til en anonym fagforening kan henvises uten den normale prikkoperatøren.

int main () {union {// definere anonym union uten type navn. int x, char c; flyte f; }; x = 10; // refererte til union variabelen med out dot operator cout <

I anonym union er ingen medlemsfunksjon tillatt, den kan ikke inneholde private eller beskyttede data, og den globale anonyme fagforeningen må spesifiseres som ‘statisk’.

Poengene du må huske på for den normale fagforeningserklæringen.

  • Definisjonen av en fagforening kan også inneholde konstruktør og ødelegger.
  • Forbundet gir flere måter å vise den samme minneplassen.
  • Forbundet kan ikke arve klassen av noen type.
  • Forbundet kan ikke være en baseklasse.
  • Forbundet kan ikke ha den virtuelle medlemsfunksjonen.
  • Forbundet kan ikke ha en statisk variabel.
  1. Strukturen bruker forskjellig minneplassering for forskjellige medlemmer. Derfor kan den distinkte verdien tildeles til alle medlemmene. Men forbundet tildeler samme minneplassering til alle medlemmene. Derfor kan en enkelt verdi tildeles til alle medlemmene.
  2. Strukturen har ulik minneplassering for alle medlemmer; dermed kan den inneholde flere verdier om gangen, og som vi vet at unionen deler samme minneplassering for alle medlemmene, kan den lagre en enkelt verdi om gangen.
  3. Generelt er den totale størrelsen på strukturen større enn den totale størrelsen på foreningen fordi størrelsen på en struktur er summen av størrelsen på alle medlemmene i strukturen og størrelsen på foreningen er størrelsen på medlemmet av største type.
  4. Struktur gir én visning av hvert sted, mens forbundet gir flere visninger av et enkelt sted.
  5. Du kan erklære en anonym fagforening, men ikke en anonym struktur.

likheter:

  • Både struktur og fagforening har samme måte å erklære seg selv på, lage variabler og samme måte å få tilgang til medlemmer av variablene.
  • Både struktur og forening kan overføres til en funksjon ved begge metodene samtale etter verdi og samtale ved referanse.
  • Både struktur og forening er containerdatatype og inneholder et objekt av hvilken som helst datatype, inkludert annen struktur, fagforening, gruppe som deres medlemmer.

Konklusjon:

Både struktur og forening er containerdatatype som inneholder medlem av forskjellige typer. Men strukturer brukes når vi trenger å lagre distinkt verdi for alle medlemmene i et distinkt minneplass. Fagforeningene brukes når det er behov for konvertering av type.