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

Stockage de données d'union de type numérique

Voir aussi

Référence

Classes, structures et unions

Mots clés C++

Unions anonymes

class (C++)

struct (C++)