Объединение создается при помощи ключевого слова union.
Синтаксис:
union поле тега {
тип поле1;
тип поле2;
тип поле3;
.
.
.
тип полеN;
};
Обратите внимание на сходство синтаксисов объявлений структур и объединений в следующем примере:
union unmany_types {
char с;
int ivalue;
float fvalue;
double dvalue;
} unmy_union;
Объединение описывается при помощи ключевого слова union, за которым следует необязательное поле тега unmany_types. Поле тега объединения используется так же, как поле тега crpyicrypbi. Данное объединение содержит несколько элементов: символ, целое число, число с плавающей точкой и число двойной точности. В отдельный момент времени это объединение позволяет хранить в unmany_types информацию только об одном типе данных.
С объединением связана переменная unmy_union. Если этот оператор расположен в функции, то область действия данного объединения является локальной для функции. Если оператор расположен за пределами всех функций, то область действия объединения — глобальная.
С одним объединением можно связать несколько переменных; можно также обращаться к членам объединения при помощи операции "точка" (.).
Синтаксис:
unname.mname
В этой записи unname является переменной, связанной с типом объединения, а mname — имя любого элемента объединения.
Создание простого объединения
Пример: показать, что объединение может содержать различные типы данных, но в конкретный момент времени оно содержит значение только для одного типа.
#include <iostream.h>
union unmany_types
{
char c;
int ivalue;
float fvalue;
double dvalue;
} unmy_un ion;
int main (void)
{
// valid I/O
unmy_un ion. c= * b ' ;
cout << unmy_union.c << "\n";
unmy_union. ivalue=1990;
cout << unmy_union.ivalue << "\n";
unmy_union. fvalue=19.90;
cout << unmy_union.fvalue << "\n";
unmy_union.dvalue=987654.32E+13;
cout << unmy_union.dvalue << "\n";
// неправильный ввод/вывод
cout << unmy_union.c << "\n";
cout << unmy_union.ivalue << "\n";
cout << unmy_union.fvalue << " \n";
cout << unmy_union.dvalue << "\n";
// размер объединения
cout << "The size of this union is: "
<< sizeof(unmany_types) <<[{|"|}]bytes." << "\n";
return (0);
}
Сначала программа просто вводит и распечатывает информацию из объединения. Эта часть работает, поскольку вызываемое объединение хранит в каждый момент времени только один тип данных. Во второй части программы делается попытка вывести каждый тип, существующий в объединении. Единственным верным значением будет число двойной точности, поскольку оно было последним значением, записанным в предыдущей части программы.
b
19.9
9.876543е+18
_
-26216
-2.054608e+33
9.876543e+18
The size of this union is: 8 bytes.
Объединения занимают память, необходимую для самого большого типа данных, хранящегося в них. Все другие типы данных в объединении используют совместно часть этой памяти или всю эту память.