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; } Основной причиной использования объединений является экономия памяти. | |
Просмотров: 1874 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |