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