| HTML [44] |
| Visual C++ и MFC [21] |
| c++ [78] |
| php [19] |
| Javascript [15] |
| C# [51] |
| загрузки [0] |
|
XNA [10]
создание игр с помощью xna
|
| Главная » Статьи » 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;
}
Основной причиной использования объединений является экономия памяти. | |
| Просмотров: 1904 | Рейтинг: 0.0/0 |
| Всего комментариев: 0 | |