Четверг, 09.01.2025, 12:18
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » c++

Объединения

Объединение - это формат данных, который может содержать различные типы данных, но только один тип одновременно. Объединение позволяет нескольким переменным различных типов занимать один участок памяти (т. е. все переменные-члены объединения имеют одинаковый адрес). Синтаксис объединения следующий:

union [имя_объединения] {список_переменных} [имя_объекта] ;

Приведем пример объединения:

union Num{
 int int_var;
 double double_var;
};

Размер, который занимает в памяти объединение, равен размеру наибольшего элемента данного объединения. То есть, когда мы создаем объединение, компилятор выделяет память под объединение размером с наибольший элемент объединения. В дальнейшем в данный участок памяти записываются значения элементов объединения начиная с начального байта этого участка. Таким образом, каждое новое значение "затирает" старое, даже если это значение другого элемента. Именно поэтому можно работать только с одним элементом объединения.

Существует два способа объявления объекта объединения. В языке С объект объявляется следующим образом:

union имя_объединения имя_объекта;

В С++ не обязательно использовать ключевое слово union, то есть объект объединения можно объявить следующим образом:

имя_объединения имя_объекта;

Рассмотрим пример работы с объединением:

 #include <iostream.h>
 union Num{
 int int_var;
 double double_var;
 };
 void main(){
 Num obj;
 obj.int_var = 5;
 cout<<obj.int_var<<endl;
 obj.double_var = 12;
 cout<<obj.double_var<<endl; 
 cout<<obj.int_var<<endl;
 }
выведет на экран
 5
 12
 0 //результат будет неоднозначным,
 //т.к. в данный момент времени существует только double_var

Существует такое понятие как анонимное объединение, то есть объединение, которое не имеет никакого имени. Элементы такого объединения становятся по сути полноценными переменными, которые разделяют один адрес, но все также в одно и тоже время текущим может быть только один элемент. Приведем пример:

void main()
{
 union {
 int i;
 char ch;
 };
 i = 5;
 cout<<i<<endl;
 ch = 's';
 cout<<ch<<endl;
}
на экране отобразится:
 5
 s

Обратите внимание, что присвоение значений элементам анонимного объединения происходит точно также как и присвоение значений обычным переменным.

Если анонимное объединение объявлено в глобальном контексте, то оно должно быть определено как статическое.

static union {
 int i;
 char ch;
};

void main()
{
 i = 5;
 cout<<i<<endl;
 ch = 's';
 cout<<ch<<endl;
}

Основной причиной использования объединений является экономия памяти.

Категория: c++ | Добавил: slava (30.05.2011)
Просмотров: 1874 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]