На этом шаге мы введем понятие объединения.
Структура данных объединение подобна структуре, однако в каждый момент времени может использоваться (является активным) только один из его компонентов. Шаблон объединения может задаваться записью вида:
union { <имя типа1> <компонента1>; <имя типа2> <компонента2>; . . . <имя типаN> <компонентаN>; };
Поля структуры размещаются в оперативной памяти одно за другим в той последовательности, в которой перечислены в описании. Поля объединений размещаются, начиная с одного места в памяти и, следовательно, накладываются друг на друга.
Доступ к компонентам объединения осуществляется тем же способом, что и к компонентам структур.
#include <iostream.h>
void main ()
{
union Nata
{
int a;
char b;
} kkk;
kkk.a = 123;
cout << kkk.a;
}
В качестве примера объекта типа union рассмотрим объединение geom_fig[1]:
union { int radius; // Окружность. int a[2]; // Прямоугольник. int b[3]; // Треугольник. } geom_fig;
В этом примере обрабатывается только активный компонент, то есть компонент, который последним получает свое значение. Например, после присваивания значения компоненту radius не имеет смысла обращение к массиву b.
Обратите внимание на то, что на одних компьютерах поля битов размещаются слева направо, на других - справа налево. Это значит, что при всей полезности работы с ними, если формат данных, с которыми мы имеем дело, дан нам свыше, то необходимо самым тщательным образом исследовать порядок расположения полей; программы, зависящие от такого рода вещей, не переносимы.
Объединения применяются для:
Таким образом, после задания рассмотренной структуры данных в программе будет находиться переменная,
которая на законных основаниях может хранить "в себе" значения нескольких типов.
На следующем шаге мы поговорим о переменных структурах, хранящих характеристики
различных объектов.