Unions
Le mot clé union désigne des données définies par l'utilisateur ou un type de classe qui, à un moment donné, ne contient qu'un seul objet de sa liste de membres. L'objet peut être un tableau ou un type de classe).
union [tag] { member-list } [declarators]; [union] tag declarators;
Paramètres
tag
Nom du type donné à l'union.member-list
Liste des types de données que l'union peut contenir. Consultez la section Notes.declarators
Liste des déclarateurs spécifiant les noms de l'union. Pour plus d'informations, consultez Vue d'ensemble des déclarateurs.
Notes
La member-list d'une union représente les sortes de données que l'union peut contenir. Une union requiert suffisamment de stockage pour contenir le plus grand membre de sa member-list. Pour plus d'informations, consultez Déclarations des unions (Référence du langage C).
Déclaration d'une union
Commencez la déclaration d'une union avec le mot clé union et placez la liste des membres entre accolades :
// 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()
{
}
Utilisation d'une union
Une union C++ est une forme limitée du type classe. Elle peut contenir des spécificateurs d'accès (public, protected, private), des données membres et des fonctions membres, y compris des constructeurs et des destructeurs. Elle ne peut pas contenir de fonctions virtuelles ni de données membres static. Elle ne peut pas être utilisée comme classe de base et ne peut pas posséder de classes de base. L'accès par défaut des membres d'une union est public.
En C++, vous n'avez pas besoin d'utiliser le mot clé union quand vous déclarez une variable d'union.
DATATYPE var3; // C++ declaration of a union variable
Une variable d'un type union peut contenir une seule valeur d'un type quelconque déclarée dans l'union. Utilisez l'opérateur de sélection de membres (.) pour accéder à un membre d'une union :
var1.i = 6; // Use variable as integer
var2.d = 5.327; // Use variable as double
Vous pouvez déclarer et initialiser une union dans la même instruction en assignant une expression placée entre accolades. L'expression est évaluée et assignée au premier champ de l'union.
Exemple
#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);
}
Sortie
10
3.141600
L'union NumericType est organisée en mémoire (conceptuellement) comme l'illustre la figure ci-dessous.
Stockage de données dans l'union NumericType