Об'єднання (структура даних)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

В інформатиці об'єднання (англ. union) є значенням або структурою даних, яке може мати кілька різних подань.

У сильно типізованих мовах тип об'єднання відповідає поняттю з теорії типів тип-сума, тобто вимагає використовувати різні конструктори для значень різних типів.

У слабко типізованих мовах, як-от C і 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;

Див. також[ред. | ред. код]