Compartir a través de


Unions

Una union es un tipo de clase o de datos definidos por el usuario que, en un momento dado, contiene solo un objeto de su lista de miembros (que puede ser una matriz o un tipo de clase).

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

Parámetros

  • tag
    Nombre del tipo dado a la unión.

  • member-list
    Lista de los tipos de datos que la unión puede contener. Vea la sección Comentarios.

  • declarators
    Lista de declaradores que especifican los nombres de la unión. Vea Información general sobre los declaradores para obtener más información.

Comentarios

El elemento member-lis de una unión representa las clases de datos que la unión puede contener. Cada unión necesita almacenamiento suficiente para contener el miembro más grande de su member-list. Para obtener más información, vea Declaraciones de unión (Referencia del lenguaje C).

Declarar una unión

Comience la declaración de una unión con la palabra clave union y agregue la lista de miembros entre llaves:

// 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()
{
}

Usar una unión

Una unión de C++ es una forma limitada del tipo de clase. Puede contener especificadores de acceso (public, protected, private), datos de miembros y funciones miembro, incluidos constructores y destructores. No puede contener funciones virtuales o miembros de datos estáticos. No puede utilizarse como clase base, ni tampoco puede tener clases base. El acceso predeterminado de los miembros de una unión es público.

En C++ no es necesario usar la palabra clave union después de declarar una variable de unión.

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

Una variable de un tipo de unión puede contener un valor de cualquier tipo declarado en la unión. Utilice el operador de selección de miembros (.) para tener acceso a un miembro de una unión:

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

Puede declarar e inicializar una unión en la misma instrucción mediante la asignación de una expresión entre llaves. La expresión se evalúa y se asigna al primer campo de la unión.

Ejemplo

#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);
}

Salida

10
3.141600

La unión NumericType se organiza en memoria (conceptualmente), como se muestra en la ilustración siguiente.

Almacenamiento de datos en unión de tipo numérico

Almacenamiento de datos en una unión de tipo numérico

Vea también

Referencia

Clases, estructuras y uniones

Palabras clave de C++

Uniones anónimas

class (C++)

struct (C++)