РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
672 of 815 menu

Объявление union

Объявление union создает тип данных, все члены которого разделяют одну и ту же область памяти. Размер такого объединения равен размеру самого большого его члена, а в один момент времени активным может быть только один член. Если записать значение в один член, то предыдущее значение другого члена будет затёрто.

В отличие от struct и class, члены объединения по умолчанию являются публичными (public). Объединение может содержать конструкторы, деструкторы и методы, но не может наследоваться и не может иметь виртуальных функций. Также нельзя хранить в объединении типы, которые имеют нетривиальные конструкторы или деструкторы (например, std::string), за исключением случая, когда они не являются активными.

Объявление объединения начинается с ключевого слова union, за которым следует имя типа и список членов в фигурных скобках. После закрывающей фигурной скобки обязательно ставится точка с запятой.

Синтаксис

union Name { type1 member1; type2 member2; // ... };

Пример

Давайте создадим объединение Value, которое может хранить целое число, вещественное число или символ:

#include <iostream> using namespace std; union Value { int i; double d; char c; }; int main() { Value v; v.i = 42; cout << v.i << endl; return 0; }

Результат выполнения кода:

42

Пример

Поскольку все члены разделяют одну область памяти, запись в один член изменяет значение другого. Давайте убедимся в этом:

#include <iostream> using namespace std; union Value { int i; char c; }; int main() { Value v; v.i = 65; cout << v.i << endl; cout << v.c << endl; return 0; }

Результат выполнения кода:

65 "A"

Число 65 в таблице ASCII соответствует символу 'A', поэтому оба члена показывают одно и то же значение с разной интерпретацией.

Пример

Объединение может содержать методы и конструкторы. Давайте создадим объединение с удобным методом для вывода активного значения:

#include <iostream> using namespace std; union Value { int i; double d; Value() : i(0) {} void printInt() { cout << i << endl; } }; int main() { Value v; v.i = 123; v.printInt(); return 0; }

Результат выполнения кода:

123

Смотрите также

  • объявление struct,
    которое создает структуру с публичными членами
  • объявление class,
    которое создает класс с приватными членами
  • объявление enum,
    которое создает перечисление
  • объявление enum class,
    которое создает строго типизированное перечисление
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить