Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
#1

Union - C++

05.09.2011, 09:12. Просмотров 2708. Ответов 10
Метки нет (Все метки)

Человеки привет =) Скажите пожалуйста для чего используются union в С++?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2011, 09:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Union (C++):

Union - C++
Возник вопрос про объединения. В книгах я встречал лишь случай, когда размер одного из полей больше или равен сумме размеров остальных....

Union - C++
Здравствуйте! Я уже задавал тут вопрос, как использовать union, и сейчас столкнулся с проблемой: Есть 3 файла и заголовочный файл -...

Union - Объединения - C++
Объясните доходчиво что такое Объединения и для какой работы они нужны. Несколько книг листал а про объединения толком ничего не сказано...

Union, struct - C++
Здравствуйте! Помогите, пожалуйста, решить проблему. Есть строки: 1 2 3 4 1 2 3 ... ... * - заканчивается звездочкой

обьединения union - C++
вот собственно код struct х{ union { struct a { string name_c; ...

Управляемый value union - C++
Добрый вечер. Пытаюсь создать такую структуру: using namespace std; union actiondata{ char *filename; double delta; }; ...

10
Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 09:20 #2
Для расположения данных, принадлежащих объединению, в одной области памяти. Это как я понимаю. Возможно, и не совсем верно / совсем неверно

А в целом, довольно много написано в Интернете: на вскидку результат из поисковой системы.

Оттуда можно прочитать, что объединение хранит только один объект из списка его членов, а размер объединения равен размеру самого большого из принадлежащих типов. Поэтому экономится память.
0
Alex1234
13 / 13 / 0
Регистрация: 11.02.2011
Сообщений: 55
05.09.2011, 09:26 #3
Можешь смело его не использовать.
1
Nequti
246 / 51 / 1
Регистрация: 21.05.2011
Сообщений: 297
05.09.2011, 09:29  [ТС] #4
Enfernuz,я знаю что такое юнион, просто мне хотелось узнать для чего их используют =)
0
Alex1234
13 / 13 / 0
Регистрация: 11.02.2011
Сообщений: 55
05.09.2011, 09:34 #5
Если есть под рукой исходники Qt, посмотри реализацию контейнеров, там встречается union.
0
Петррр
5970 / 3407 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
05.09.2011, 10:01 #6
В каких - то видеоуроках слышал, что используются для переносимости кода.
0
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 535
05.09.2011, 10:17 #7
union - это экономный класс, другими словами класс специального вида. Объединение может иметь несколько переменных-членов, однаков каждый момент времени только одна из них будет содержать значение. Когда значение присваивается одному из членов объединения, все остальные переходят в неопределенное состояние.

Вообще используется для экономии памяти, в основном при разработке игр (в книгах Ламота по DirectX можешь посмотреть), либо внуть реализации каких-либо классов (когда нужна большая скорость)
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.09.2011, 10:25 #8
Цитата Сообщение от TheAthlete Посмотреть сообщение
Объединение может иметь несколько переменных-членов, однаков каждый момент времени только одна из них будет содержать значение. Когда значение присваивается одному из членов объединения, все остальные переходят в неопределенное состояние.
Иначе говоря, все члены объединения используют одну и ту же область памяти.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
05.09.2011, 14:33 #9
допустим ты в пакете получаешь данные и при этом знаешь, что можешь получить десять разных типов, тогда обычно делают так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct StructPacket
{
 
   union
   {
       int m_int;
       float m_float;
       double m_double;
   };
 
   enum
   { 
       E_INT,
       E_FLOAT,
       E_DOUBLE
   } m_type;
 
};
 
int main()
{
   StructPacket packet;
   packet.m_type = StructPacket::E_FLOAT;
   packet.m_float = 10.5f;
   return 0;
}
тажа реализация всех Variant'ов через union делается

Добавлено через 4 часа 7 минут
C
1
2
3
4
5
6
7
8
9
10
11
typedef union jvalue {
    jboolean z;
    jbyte    b;
    jchar    c;
    jshort   s;
    jint     i;
    jlong    j;
    jfloat   f;
    jdouble  d;
    jobject  l;
} jvalue;
например
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
05.09.2011, 15:35 #10
Цитата Сообщение от Alex1234 Посмотреть сообщение
Можешь смело его не использовать.
Аргументы?
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.09.2011, 17:20 #11
Цитата Сообщение от fasked Посмотреть сообщение
Иначе говоря, все члены объединения используют одну и ту же область памяти.
Совершенно верно.
Вот пример, получение из двойного слова(DWORD) любой байт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
typedef union {
  unsigned long color;
  struct {
       unsigned char b, g, r, a;
  };
} argb;
 
 
int main(void) {
  argb col;
  col.color = 0xAABBCCDD;
 
  printf("0x%X", col.a);
  printf("%X", col.r);
  printf("%X",  col.g);
  printf("%X\n", col.b);
 
  getchar();
  return 0;
}
1
05.09.2011, 17:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 17:20
Привет! Вот еще темы с ответами:

union с методами - C++
Такой вопрос - когда в union-е поля, то все ясно - оно занимает место, равное наибольшему размеру типов его полей, а когда в нем есть ещё и...

Union-объеденения - C++
Добрый день. Почему при выводе cout &lt;&lt; &quot;u2 как целое: &quot;; //выводит число 22872? cout &lt;&lt; u2.i &lt;&lt; '\n'; // ...

Объединения (union) - C++
Имеется задача: (Нужно выполнить решения, используя объединения.) Ввести с клавиатуры два произвольных символа. Составить число типа...

Тип объединения union - C++
Цель: Создайте объект на основе типа объединения union. Докажите, что члены объекта располагаются по одному адресу, а функции-члены - по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru