Diferència entre estructura i unió

Autora: Laura McKinney
Data De La Creació: 1 Abril 2021
Data D’Actualització: 11 Ser Possible 2024
Anonim
Diferència entre estructura i unió - Tecnologia
Diferència entre estructura i unió - Tecnologia

Content


C ++ permet totes les cinc maneres que proporcionava el llenguatge C per crear dades personalitzades. Aquestes cinc maneres són "estructura", "camp de bits", "unió", "enumeració", "mecanografia". A l'article següent estudiarem la diferència entre estructura i unió. L'estructura i la unió són els tipus de dades de contenidors que poden contenir dades de qualsevol tipus. La principal diferència que distingeix estructura i unió és que l'estructura té una ubicació de memòria separada per a cadascun dels seus membres, mentre que, els membres d'una unió comparteixen la mateixa ubicació de memòria.

Entenem la diferència entre estructura i unió, juntament amb un gràfic de comparació.

  1. Gràfic de comparació
  2. Definició
  3. Diferències claus
  4. Semblances
  5. Conclusió

Gràfic de comparació

Bases de la comparacióEstructuraUnió
BàsicLa ubicació de memòria separada s'assigna a cada membre de l'estructura.Tots els membres del sindicat comparteixen la mateixa ubicació de memòria.
Declaracióstruct struct_name {
element element1;
element element2;
.
.
} variable1, variable2, ...;
union u_name {
element de tipus1;
element element2;
.
.
} variable1, variable2, ...;
paraula clauestructuraUnió
MidaDimensió de l'estructura = suma de la mida de tots els membres de les dades.Mida de la unió = mida dels membres més grans.
Valor de la botigaEmmagatzema valors diferents per a tots els membres.Emmagatzema el mateix valor per a tots els membres.
En un momentUna estructura emmagatzema diversos valors, dels diferents membres, de l'estructura.Un sindicat emmagatzema un valor únic a la vegada per a tots els membres.
Manera de visualitzacióProporcioneu una manera única de veure cada ubicació de la memòria.Proporciona una manera múltiple de veure la mateixa ubicació de la memòria.
Funció anònimaNo hi ha cap funció anònima.Es pot declarar unió anònima.

Definició d’estructura

L’estructura és una col·lecció de variables de diferents tipus de dades, a les quals es fa referència amb un nom comú. Les variables d'una estructura s'anomenen "membres". De manera predeterminada, tots els membres d’una estructura són “públics”. Quan declareu una estructura, creeu una plantilla, que es pot utilitzar per crear objectes d'estructura, compartint la mateixa organització de membres de dades i funcions de membres. La declaració de l'estructura sempre va precedida de la paraula clau "struct", que indica al compilador que s'ha declarat una estructura. Prenem un exemple.


Prenem un exemple.

struct empleat {string string; string company_name; ciutat de corda; } emp1, emp2;

Aquí, declarem una estructura per emmagatzemar la informació dels empleats. La declaració es tanca amb un punt i coma, ja que la declaració d'estructura és una sentència i, en C ++, la sentència es tanca amb un punt i coma.

El nom que es dóna a una estructura defineix un "tipus" (en l'exemple anterior, el nom de l'estructura és "empleat"). Les variables d’aquest tipus es podrien crear, com anteriorment, hem creat dues variables “emp1” i “emp2” del tipus “empleat”. A l'exemple anterior, hem creat una variable "estructura" just després de la declaració; alternativament, es podria crear per separat.

struct emple emp1, emp2; // la paraula clau no és obligatòria.

Els membres d'una variable d'estructura es poden inicialitzar o es pot accedir mitjançant l'operador punt (.).


emp1.name = "ashok";

La informació continguda en una variable d’estructura es pot assignar a una altra variable d’estructura del mateix tipus que segueix.

emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // assignant valors del membre de emp1 a emp2. cout <

Aquí, hem assignat la variable d'estructura "emp1" a "emp2", així, "emp1" copia tot el valor dels seus membres al membre corresponent de "epm2".

El membre de la variable d'estructura es pot passar a la funció.

funzione (emp1.city);

Tota la variable d'estructura es pot passar a la funció, tant pels mètodes anomenats per valor com per trucats per referència.

funt (emp1); // funció de trucada per mètode de trucada per valor. . . void function (struct emp emp) {// recepció de valors dels membres de emp1. cout <

Aquí, el canvi al valor d'un membre de la variable d'estructura no es reflectirà fora de la funció, ja que la variable es fa passar per mètode de trucada. Ara fem el mateix per trucada mitjançant mètode de referència.

funt (& emp1); // funció de trucada per trucada per mètode de referència. . . void function (struct empleat * emp) {// recepció de l'adreça de emp1. emp-> ciutat = "Nur"; // canviar el valor del membre (ciutat) de l'estructura variable emp1. . }

Aquí, la variable d’estructura es passa per referència així que, el canvi al valor dels membres de la variable d’estructura també es reflecteix fora de la funció també.

srtuct empleat * emp; // decalificació del punter d'estructura del tipus empleat. emp = & emp1; // assignant l'adreça de emp1 al punter. emp-> ciutat // punter que accedeix a la ciutat membre d'emp1.

També es pot crear el punter a l'estructura; manté l'adreça de l'estructura variable.

En estructura, la inicialització agregada és permesa quan la definició de l'estructura no conté, cap constructor o funcions virtuals definides per l'usuari o classe base o camp privat o protegit.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Possible com a estructura de l'empleat no conté cap de les coses esmentades anteriorment.

Definició d’Unió

Una unió és una ubicació de memòria compartida per dos o més tipus de variables diferents declarats sota un únic tipus d'unió. La paraula clau utilitzada per declarar una unió és “unió”. A C ++, una unió pot contenir tant la funció de membre com les variables. Per defecte, tots els membres del sindicat són “públics”. La declaració de la "unió" és similar a la declaració de l'estructura.

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

Aquí, havíem declarat una unió anomenada u_type. Els membres del tipus u_type són "x" de tipus enter, "c" de tipus de caràcter i "f" de tipus float. També havíem creat les variables d'unió "u1" i "u2", de tipus "u_type", just després de la declaració d'una unió. També podem declarar la unió variable per separat de la declaració d’unió.

int main () {union u_type u1, u2; // La unió de paraules clau no és obligatòria a C ++. }

L’accés als membres de la unió es pot fer mitjançant l’operador de punt (.), Precedit de la unió variable i seguit del membre d’aquesta variable.

u1.x = 10;

Com les estructures, la inicialització agregada no és possible en una unió. Com sabem, la unió comparteix la mateixa ubicació de memòria per a tots els membres al mateix temps, només s’inicialitza una variable i tota la variable s’actualitza automàticament amb el valor inicialitzat.

u1.x = 10; cout <

Si intenteu canviar el valor de qualsevol membre de "u1". L’altre membre s’actualitzarà automàticament a aquest valor.

u1.c = 65; cout <

L’espai assignat a la unió és igual a la mida del membre més gran del sindicat. Com que el byte assignat a "char" és d'1 byte, "int" és de 4 bytes i "float" és de 4 bytes, la mida més gran és de 4 bytes. Així, la memòria assignada a "u1" i "u2" és de 4 bytes.

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

El punter a la unió es pot crear de la mateixa manera que en l'estructura. El punter té la direcció de la unió.

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

Com a estructura, la unió també es pot passar a les funcions pels dos mètodes, és a dir, trucar per valor i trucar per referència.

funció (u1); // funció de trucada per mètode de trucada per valor. . . void function (union u_type un) {// rebent el valor del membre de u1. cout <

Ara, anem a trucar la funció mitjançant el mètode de trucada per referència.

funció (& u1); // funció de trucada per trucada per mètode de referència. . . void function (union u_type un) {// recepció de l'adreça de u1. un-> x = 20. }

Hi ha un tipus especial d’unió a C ++ anomenat Unió Anònima ”. La unió anònima no pot tenir el nom del tipus i no es pot crear cap variable d'aquesta unió. Només cal dir-li al compilador que les seves variables de membre comparteixen la mateixa ubicació. Es pot fer referència a la variable d'una unió anònima sense l'operador dot (.) Normal.

int main () {union {// definir unió anònima amb el nom del tipus. int x, char c; flotar f; }; x = 10; // va refer la variable d'unió amb l'operador de punts fora cout <

A la unió anònima no es permet cap funció de membre, no pot contenir dades privades ni protegides, i la unió anònima global s’ha d’especificar com a “estàtica”.

Els punts a recordar per a la declaració sindical normal.

  • La definició d’una unió també pot contenir constructor i destructor.
  • La unió proporciona diverses maneres de veure la mateixa ubicació de memòria.
  • La unió no pot heretar la classe de cap tipus.
  • La unió no pot ser una classe base.
  • La unió no pot tenir la funció de membre virtual.
  • La unió no pot tenir una variable estàtica.
  1. L’estructura utilitza diferents ubicacions de memòria per a membres diferents. Per tant, es pot assignar a tots els membres el valor diferent. Però, la unió atorga a tots els membres la mateixa ubicació de memòria. Per tant, tots els membres es poden assignar un valor únic.
  2. L’estructura té una ubicació de memòria diferent per a tots els membres; per tant, pot contenir diversos valors alhora, i, com sabem, la unió comparteix la mateixa ubicació de memòria per a tots els membres, per tant, pot emmagatzemar un únic valor alhora.
  3. Generalment, la mida total de l'estructura és més gran que la mida total de la unió perquè la mida d'una estructura és la suma de la mida de tots els membres de les estructures i la mida de la unió és la mida del membre de la tipus més gran.
  4. L'estructura proporciona una vista única de cada ubicació mentre que, la unió proporciona les múltiples visualitzacions d'una sola ubicació.
  5. Podeu declarar una unió anònima però no una estructura anònima.

Similituds:

  • Tant l’estructura com la unió tenen la mateixa manera de declarar-se, creant variables i la mateixa manera d’accedir als membres de les variables.
  • Tant la estructura com la unió es poden passar a una funció tant pels mètodes com a trucades per valor i per trucada per referència.
  • Tant la estructura com la unió són tipus de dades de contenidor i contenen un objecte de qualsevol tipus de dades, incloent-hi una altra estructura, unió, matriu com a membres.

Conclusió:

Ambdues, estructura i unió són el tipus de dades del contenidor que conté el membre de diferents tipus. Però es fan servir estructures quan necessitem emmagatzemar valor diferent per a tots els membres en una ubicació de memòria diferent. Les unions s’utilitzen quan es necessita la conversió de tipus.