Exemples d'unió C++

Exemples D Unio C



Una unió és un tipus de classe especial en C++ que permet l'emmagatzematge de diferents tipus de dades en una ubicació de memòria compartida. A diferència de les estructures, on cada part sol obtenir la seva memòria, les unions permeten que les diferents peces de dades utilitzin la mateixa ubicació de memòria. Aquesta característica fa que les unions siguin especialment útils quan l'eficiència de la memòria és una prioritat i només cal accedir a un dels membres alhora. En aquest article, aprofundirem en el concepte d'unions en C++ i explorarem múltiples exemples que demostren la seva utilitat en diversos escenaris.

Sintaxi:

Una unió és un tipus que l'usuari defineix, que permet l'emmagatzematge de diversos tipus de dades dins d'una ubicació de memòria compartida. L'ús d'una unió segueix una sintaxi que és idèntica a una estructura.







La sintaxi fonamental és la següent:



Unió UnionName {

// Declaracions dels membres

DataType1 membre1 ;

Membre DataType2 2 ;

// ...

} ;

Aquí, 'UnionName' serveix com a identificador de la unió que proporciona un nom únic per fer referència a aquest tipus específic definit per l'usuari. Els tipus de dades dels membres del sindicat es denoten com a 'DataType1', 'DataType2' i així successivament. Aquests tipus de dades signifiquen els diferents tipus d'informació que es poden emmagatzemar dins de la unió. Cada membre del sindicat, designat amb noms com ara 'membre1', 'membre2', etc., representa una dada diferent.



Ara entenem la sintaxi bàsica. Utilitzem ara alguns casos per entendre-ho millor.





Exemple 1: ús bàsic de la unió

El primer exemple il·lustra la utilització bàsica de les unions en C++, mostrant com permeten compartir l'espai de memòria entre diferents tipus de dades dins d'una única estructura.

Aquí teniu un exemple:



#inclou

utilitzant l'espai de noms std ;

Unió ArrayUnion {

int intArray [ 5 ] ;

flotar floatArray [ 5 ] ;

} ;

int principal ( ) {

ArrayUnion arrayUnion ;

per ( int i = 0 ; i < 5 ; ++ i ) {

arrayUnion. intArray [ i ] = i * 2 ;

}

cout << 'Matriu int:' ;

per ( int i = 0 ; i < 5 ; ++ i ) {

cout << ' ' << arrayUnion. intArray [ i ] ;

}

cout << endl ;

per ( int i = 0 ; i < 5 ; ++ i ) {

arrayUnion. floatArray [ i ] = i * 1.5f ;

}

cout << 'Matriu flotant:' ;

per ( int i = 0 ; i < 5 ; ++ i ) {

cout << ' ' << arrayUnion. floatArray [ i ] ;

}

cout << endl ;

tornar 0 ;

}

En aquest fragment de codi C++, utilitzem una unió anomenada 'MyUnion' que incorpora tres membres de dades diferents: un nombre enter (intValue), un nombre de coma flotant (floatValue) i un caràcter (charValue). Només un d'aquests membres pot estar actiu en un moment donat a causa de la capacitat d'un sindicat per compartir un espai de memòria.

Dins de la funció 'principal', declarem una instància de la unió que és 'myUnion'. Primer, establim el valor del membre enter en 42 i fem servir 'cout' per imprimir-lo. Posteriorment, assignem el valor de coma flotant de 3,14 al membre 'floatValue' i l'imprimem. Finalment, assignem el caràcter 'A' al membre 'charValue' i l'imprimim. És essencial recordar que, com que tots els membres del sindicat comparteixen la mateixa ubicació de memòria, modificar un membre pot tenir un impacte en els valors dels altres membres. El codi conclou tornant 0 que significa una execució correcta.

Exemple 2: Unió amb Struct

Una estructura és un tipus de dades en C++ que els usuaris poden crear per combinar les variables de diversos tipus sota un nom unificat. La combinació d'una unió amb una estructura pot ser útil quan volem crear una estructura de dades que pugui contenir diferents tipus de dades, i cada tipus està associat a un camp específic. Aquest aparellament permet el desenvolupament d'estructures de dades complexes amb representacions diverses.

Aquí teniu un exemple d'ús d'una unió dins d'una estructura en C++:

#inclou

utilitzant l'espai de noms std ;

estructura Punt {

int s1 ;

int s2 ;

} ;

Unió Forma {

int costats ;

flotar radi ;

Punt centre ;

} ;

int principal ( ) {

Forma forma ;

forma. costats = 5 ;
cout << 'costats:' << forma. costats << endl ;

forma. radi = 6.0f ;
cout << 'Radi:' << forma. radi << endl ;

forma. centre = { 10 , 20 } ;
cout << 'Centre: (' << forma. centre . s1 << ', ' << forma. centre . s2 << ')' << endl ;

tornar 0 ;

}

En aquest codi, definim un programa C++ que utilitza una unió i una estructura per representar diferents aspectes d'una forma geomètrica. En primer lloc, declarem una estructura 'Punt' que consta de dos membres enters, 's1' i 's2', que representen les coordenades d'un punt en un espai 2D. Aleshores, definim una 'unió' anomenada 'Forma' que consta de tres membres: un enter 'costats', un punt flotant 'radi' i una estructura 'Punt' anomenada 'centre'. Passant a la funció 'principal', instanciem un objecte 'Forma' anomenat 'forma'. A continuació, demostrem la versatilitat del sindicat assignant valors als seus diferents membres. Inicialment, establim el nombre de costats a 5 i imprimim el resultat. A continuació, assignem un radi de 6,0 a la forma i donem sortida al radi. Finalment, assignem un punt central amb coordenades (10, 20) a la forma i imprimim les coordenades del centre.

Exemple 3: Unió amb Enum

En C++, les enumeracions, comunament anomenades enumeracions, serveixen per definir una col·lecció de constants integrals anomenades. Combinar enumeracions amb unions pot ser útil en escenaris on volem representar una variable que pot adoptar diferents tipus, cadascuna associada a un valor d'enumeració específic.

Aquí teniu un exemple:

#inclou

utilitzant l'espai de noms std ;

enumeració DataType {

ENTER ,

FLOTAR ,

CHAR

} ;

Unió DataValue {

int intValue ;

flotar floatValue ;

char charValue ;

} ;

estructura Dades {

Tipus de tipus de dades ;

Valor de DataValue ;

} ;

int principal ( )

{

Dades de dades 1 , dades 2 , dades 3 ;

dades 1. tipus = ENTER ;
dades 1. valor . intValue = 42 ;

dades 2. tipus = FLOTAR ;
dades 2. valor . floatValue = 3.14f ;

dades 3. tipus = CHAR ;
dades 3. valor . charValue = 'A' ;

cout << 'Dades 1:' << dades 1. valor . intValue << endl ;
cout << 'Dades 2:' << dades 2. valor . floatValue << endl ;
cout << 'Dades 3:' << dades 3. valor . charValue << endl ;

tornar 0 ;

}

Per a aquest exemple, tenim un programa que utilitza enumeracions, unions i estructures per crear una estructura de dades flexible que sigui capaç de contenir diferents tipus de valors. La enumeració 'DataType' es defineix per representar tres tipus de dades fonamentals: INTEGER, FLOAT i CHAR. La enumeració millora la llegibilitat i el manteniment del codi oferint un conjunt de constants integrals anomenades.

A continuació, fem una unió anomenada 'DataValue' amb tres membres: 'charValue' de tipus char, 'floatValue' de tipus float i 'intValue' de tipus int. Amb una unió, aquests membres comparteixen una ubicació de memòria comuna que permet que la unió s'adapti indistintament als valors de diferents tipus. A continuació, es crea l'estructura 'Data' que consta de dos membres: un enumerador 'DataType' anomenat 'tipus' i una unió 'DataValue' anomenada 'valor'. Aquesta estructura ens permet associar un tipus de dades amb el seu valor corresponent, proporcionant una representació estructurada.

A la funció 'principal', instanciem tres instàncies de l'estructura 'Data': 'data1', 'data2' i 'data3'. Assignem els valors a aquestes instàncies especificant el tipus de dades i establint el valor adequat dins de la unió. Per exemple, 'data1' s'assigna amb un tipus INTEGER amb un valor de 42. Finalment, fem servir les declaracions 'cout' per imprimir els valors que s'emmagatzemen a cada instància 'Data'. El programa genera el valor sencer de 'data1', el valor de coma flotant de 'data2' i el valor de caràcter de 'data3'.

Aquest exemple il·lustra com es pot utilitzar la combinació de les enumeracions, les unions i les estructures per crear una representació de dades versàtil i segura en C++.

Conclusió

Les unions C++ proporcionen un mecanisme potent i flexible per gestionar els diversos tipus de dades dins d'un únic espai de memòria. Els casos que s'il·lustren en aquest article posen de manifest l'adaptabilitat i l'eficàcia dels sindicats a l'hora d'abordar una sèrie d'escenaris. Des dels usos fonamentals que demostren la intercanviabilitat dels tipus de dades fins a aplicacions més complexes que impliquen estructures i enumeracions, aquests exemples subratllen l'eficiència i l'adaptabilitat que els sindicats aporten a la programació C++.