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