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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.72
a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
#1

В чем отличия между union и struct? - C++

28.10.2011, 12:52. Просмотров 9838. Ответов 6
Метки нет (Все метки)

Здравствуйте!

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

error C2228: left of '.add' must have class/struct/union type. в чем ошибка? - C++
Помогите понять в чем ошибка. Пасиб. #include <iostream.h> class book { private: char name_book; char name_avtor; ...

Какие есть отличия между struct и class кроме модификаторов доступа по умолчанию? - C++
Какие есть отличия между struct и class кроме модификаторов доступа по умолчанию?

В чем отличия между выражением (expression) и оперетором (statement)? - C++
Здравствуйте, скажите пожалуйста в чем отличия между выражением и оператором? Если x=100 это выражение, то x=100; оператор? Тогда...

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

Union внутри struct - C++
Добрый вечер! Мне нужно создать структуру с вариантной частью. Не получается получить доступ к полям структуры, находящихся внутри...

Количество памяти на union и struct - C++
struct MyStruct{ int i; char j; }; union Packed{ int i; char j; }; int _tmain(int argc, _TCHAR* argv) {

6
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
28.10.2011, 12:56 #2
В структуре элементы располагаются в памяти последовательно друг за другом
В объединении они наложены друг на друга как бутербродик =)
1
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
28.10.2011, 13:05 #3
Дополню, что из вышесказанного следует, что структура способна хранить все свои элементы одновременно, а объединение в один момент времени может интерпретироваться только как один из своих элементов.
1
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
28.10.2011, 13:36 #4
Цитата Сообщение от a91 Посмотреть сообщение
Здравствуйте!

Вопрос в названии темы
А я даже пример напишу

C++
1
2
3
4
5
6
7
union _union
{
    unsigned long uL;
    unsigned char uC[4];
} uni;
 
uni.uL = 0x000FFFF0;
Если расположение байт Little endian (младший адрес содержит младший байт), то в uni.uC[0] будет находится число 0xF0, uni.uC[1] - 0xFF и т.д.

Очень удобно использовать при работе с каким-нить типом, например, long (4 байта), по-байтно (если боишься указателей) или, если программируешь на Си, память ограничена, то можно использовать union как временную структуру для разных переменных.
0
DRUNY195
2 / 2 / 0
Регистрация: 04.04.2013
Сообщений: 247
12.06.2013, 12:03 #5
В структуре элементы располагаются в памяти последовательно друг за другом
В объединение позволяет хранить различные типы данных в одном и том пространстве памяти (но не одновременно)

Добавлено через 38 секунд
Объединения образуются во многом подобно структурам

Добавлено через 22 секунды
Объединение может хранить значение типа int, или double, или char. Структура с такими же полями способна хранить все типы одновременно

Добавлено через 42 секунды
Объединения могут употребляться в структурах и массивах и наоборот. Способ обращения к члену объединения в структуре (или к члену структуры в объединении) полностью идентичен обращению к элементу вложенной структуры. Объединение можно инициализировать только данными того типа, который имеет его первый элемент.
0
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
12.06.2013, 12:20 #6
Добавлю ко всему написанному.

union не может содержать виртуальные методы.
union не может наследоваться или быть наследуемым.
union не должен иметь статических членов данных или членов данных ссылочного типа.
Класс с нетривиальным конструктором, конструктором копирования, деструктором
или оператором присваивания не может быть членом union (только в C++98/2003).

Стандарт, "9.5 Unions".
2
XRuZzz
Антикодер
692 / 598 / 29
Регистрация: 15.09.2012
Сообщений: 2,545
12.06.2013, 12:30 #7
а я добавлю ссылку - тоже совсем недавно очень подробно разбирали.
Смысл обьединений
1
12.06.2013, 12:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 12:30
Привет! Вот еще темы с ответами:

std::bind1st: is not a class, struct, or union type - C++
Добрый день, пытаюсь найти элемент в списки указателей на объекты классачерез предикат. Вот упрощенный пример: #include <algorithm> ...

Не могу исправить error C2228: left of '.isWorked' must have class/struct/union - C++
Добрый день. Есть два взаимодружественных класса.Методом одного, меняю поля другого. Вот код: class Alarm; //класс сигнализации ...

В чем отличия между std::cref() и std::bind()? - C++
В документации не понял, что делает bind() ? И чем отличается cref() от операции взятия адреса? int x; int *y = &x; ...

Ошибка компиляции "must have class/struct/union" - C++
Здравствуйте. Возникают ошибки: Error 4 error C2228: left of '.dwFileAttributes' must have class/struct/union Error 3 error...


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

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

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