Uniões
Um union é um tipo de dados ou classe definida pelo usuário que, em determinado momento, contém apenas um objeto da lista de membros. O objeto pode ser uma matriz ou um tipo de classe).
union [tag] { member-list } [declarators]; [union] tag declarators;
Parâmetros
tag
O nome do tipo dado à união.member-list
Lista os tipos de dados que a união pode conter. Consulte Observações.declarators
Lista de declaradores que especificam os nomes da união. Consulte Visão geral dos declaradores para obter mais informações.
Comentários
O member-lis de uma união representa os tipos de dados que a união pode conter. Uma união exige armazenamento suficiente para manter o membro maior em sua member-list. Para obter mais informações, consulte Declarações union (referência da linguagem C).
Declarando uma união
Inicie a declaração de uma união com a palavra-chave union e coloque a lista de membros entre chaves:
// 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()
{
}
Usando uma união
A união C++ é uma forma limitada do tipo de classe. Pode conter especificadores de acesso (público, protegido, particular), dados de membro e as funções de membro, inclusive construtores e destruidores. Não pode conter funções virtuais ou membros de dados static. Não pode ser usada como uma classe base, nem pode ter classes base. O acesso padrão dos membros em uma união é público.
No C++ você não precisa usar a palavra-chave união ao declarar uma variável da união.
DATATYPE var3; // C++ declaration of a union variable
Uma variável de tipo união pode conter um valor de qualquer tipo declarado na união. Use o operador de seleção de membro (.) para acessar um membro de uma união:
var1.i = 6; // Use variable as integer
var2.d = 5.327; // Use variable as double
Você pode declarar e inicializar uma união na mesma instrução atribuindo uma expressão entre chaves. A expressão é avaliada e atribuída ao primeiro campo da união.
Exemplo
#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);
}
Saída
10
3.141600
A união NumericType é organizada na memória (conceitualmente) conforme mostrado na figura a seguir.
Armazenamento de dados na união NumericType