Compartilhar via


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

Armazenamento de dados em uma união de tipo numérico

Consulte também

Referência

Classes, estruturas e uniões

Palavras-chave C++

Uniões anônimas

class (C++)

struct (C++)