O tipo union é um tipo de dado complexo que é composto de um ou mais membros de tipos de
dados diferentes. Esses membros utilizam o mesmo espaço de memória tanto para escrita quanto
para acesso que devem ser feitos de forma sequencial.
A declaração é feita da seguinte forma:
Sintaxe
union nome_union
{
tipo_dado membro1;
tipo_dado membro2;
tipo_dado membroN;
};
union nome_union nome_variavel;
O corpo de uma union é delimitado por "{" e "}" e seus membros são separados por (;). Uma union
deve ser terminada com (;) e seus membros não pode ser iniciados como em structs ou enums.
O acesso aos membros de um union é feita utilizando o operadore (.) seguido do nome do do membro
como pode ver visto na sintaxe abaixo:
Sintaxe
variavel_union.nome_membro;
variavel_union.nome_membro = valor;
Exemplo 1
#include <iostream>
using namespace std;
union uniao
{
float valor1;
int valor2;
};
int main ()
{
union uniao teste;
teste.valor1 = 10.99; // uso do membro float
cout << teste.valor1 << endl; //uso do membro float
teste.valor2 = 999; //uso do membro int
cout << teste.valor2; //uso do membro
return 0;
}
Saída
10.99
999
Como um union agrupa vários tipos de dados em apenas um local de memória, é necessário
trabalhar com um membro por vez.
Caso seja feita a atribuição de valores nos membros de uma union de forma sequencial,
apenas o valor atribuído ao último membro será válido. Acessando outros membros, há a
possibilidade de geração dados corrompidos dependendo dos tipos de dados usados.