Об'єднання (структура даних)
В інформатиці об'єднання (англ. union) є значенням або структурою даних, яке може мати кілька різних подань.
У сильно типізованих мовах тип об'єднання відповідає поняттю з теорії типів тип-сума, тобто вимагає використовувати різні конструктори для значень різних типів.
У слабко типізованих мовах, як-от C і C++, тип об'єднання реалізує каламбур типізації, тобто забезпечує інтерпретування одного й того ж значення відповідно до різних типів.
Залежно від конкретної мови та типу, значення об'єднання може використовуватися в таких операціях як присвоєння чи порівняння у відриві від інформації про конкретний тип або з вимогою її наявності.
union Some {
int i;
double a;
};
Це об'єднання зберігає або ціле число (змінна i
), або число з рухомою комою (змінна a
). У C та C++ об'єднання реалізовано як різновид структури, до нього звертаються так само, як і до структури: через символ «->
» за використання вказівника, чи «.
» за використання звичайної змінної.
Можна ускладнити приклад, зробивши об'єднання частиною структури і тоді звертатися треба буде вже через структуру, тобто:
struct STRX {
int i;
Some v, *w;
} a, *b;
Розглянемо способи звернення до об'єднання, задані через вказівники, змінні та в змішаний спосіб:
a.v.i = 123;
b->v.i = 123;
a.w->i = 123;
b->w->i = 123;
Є можливість зробити об'єднання безіменним:
struct STRX {
int j;
union {
int i;
double a;
};
} a;
При цьому звернення спрощується:
a.i = 123;
a.a = 4.5;
В іншому мовному розділі є повніша стаття Union type(англ.). Ви можете допомогти, розширивши поточну статтю за допомогою перекладу з англійської.
|