Condividi tramite


Unioni

union è un tipo di classe o di dati definiti dall'utente che, in un determinato momento, contengono solo un oggetto dal relativo elenco di membri. L'oggetto può essere una matrice o un tipo di classe.

union [tag]  { member-list } [declarators]; [union] tag declarators;

Parametri

  • tag
    Nome del tipo assegnato all'unione.

  • member-list
    Elenco dei tipi di dati che l'unione può contenere. Vedere la sezione Osservazioni.

  • declarators
    Elenco di dichiaratori in cui sono specificati i nomi dell'unione. Per altre informazioni, vedere Cenni preliminari sui dichiaratori.

Note

L'elemento member-lis di un'unione rappresenta i tipi di dati che l'unione può contenere. Un'unione richiede spazio di archiviazione sufficiente per contenere il membro di dimensioni maggiori del proprio member-list. Per altre informazioni, fare riferimento a Dichiarazioni di unione (riferimento al linguaggio C).

Dichiarazione di un'unione

Iniziare la dichiarazione di un'unione con la parola chiave union e racchiudere l'elenco dei membri tra parentesi graffe:

// declaring_a_union.cpp
union DATATYPE    // Declare union type
{
    char   ch;
    int    i;
    long   l;
    float  f;
    double d;
    int *int_ptr;
} var1;          // Optional declaration of union variable

int main()
{
}

Utilizzo di un'unione

In C++ il tipo union è una forma limitata del tipo di classe che può contenere gli identificatori di accesso (pubblico, protetto, privato), dati dei membri e funzioni membro, inclusi costruttori e distruttori. L'unione non può contenere funzioni virtuali o membri dati statici e non può essere usata come classe base né contenere classi base. L'accesso predefinito dei membri in un'unione è pubblico.

In C++ non è necessario usare la parola chiave union quando si dichiara una variabile di tipo union.

DATATYPE var3;         // C++ declaration of a union variable

Una variabile di un tipo union può contenere un valore di qualsiasi tipo dichiarato nell'unione. Usare l'operatore di selezione dei membri (.) per accedere al membro di un'unione:

var1.i = 6;           // Use variable as integer
var2.d = 5.327;       // Use variable as double 

È possibile dichiarare e inizializzare un'unione nella stessa istruzione assegnando un'espressione racchiusa tra parentesi graffe. L'espressione viene valutata e assegnata al primo campo dell'unione.

Esempio

#include <iostream>
using namespace std;

union NumericType
{
    int         iValue;
    long        lValue;  
    double      dValue;  
};

int main()
{
    union NumericType Values = { 10 };   // iValue = 10
    cout << Values.iValue << '\n';
    Values.dValue = 3.1416;
    cout << Values.dValue);
}

Output

10
3.141600

L'unione NumericType viene gestita in memoria (concettualmente) come illustrato nella figura seguente.

Archiviazione di dati in unione NumericType

Archiviazione dei dati di unione di tipo numerico

Vedere anche

Riferimenti

Classi, strutture e unioni

Parole chiave C++

Unioni anonime

class (C++)

struct (C++)