R.9.5 Объединения

R.9.5 Объединения

Объединение можно представить как структуру, все члены имеют нулевое смещения, а размер ее достаточно велик, чтобы вмещать любой из ее членов. В любой момент времени объединение может содержать только один член. В объединении могут быть функции-члены (в том числе конструкторы и деструкторы), но не виртуальные функции (§R.10.2). Объединение не может иметь базовых классов и не может само использоваться в качестве базового класса. Членом объединения не может быть объект класса с конструктором или деструктором, а также с определенной пользователем операцией присваивания (§R.13.4.3). Объединение не может содержать статических членов, представляющих данные.

Объединение вида

union { список-членов }

называется безымянным объединением, оно определяет объект без имени (и без типа). Имена всех членов безымянного объединения должны отличаться от других имен в той области видимости, в которой описано объединение; их можно использовать в этой области видимости непосредственно, без обычных операций доступа к членам (§R.5.2.4).

Приведем пример:

void f()

{

 union { int a; char* p; };

 a = 1;

 //…

 p = "Jennifer";

 //…

}

Здесь a и p используются как обычные переменные (не члены), но поскольку они входят в одно объединение, их адреса совпадают.

Глобальные безымянные объединения можно описать со спецификацией static. Безымянные объединения не должны содержать частных или защищенных членов (§R.11), а также функций-членов.

Если описаны объекты объединения или указатели на него, то оно не считается безымянным, например,

union { int aa; char* p; } obj, *ptr= &obj;

aa = 1; // ошибка

ptr-›aa = 1; // нормально

Здесь присваивание простому имени aa незаконно, т.к. имя члена не привязано ни к какому объекту.

Инициализация объединений, не имеющих конструкторов, описывается в §R.8.4.1.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Оператор объединения строк

Из книги автора

Оператор объединения строк Оператор объединения строк + позволяет соединить две строки в одну. Например, сценарий:s1 = "Java";s2 = "Script";s = s1 + s2;поместит в переменную s строку


Оператор объединения строк

Из книги автора

Оператор объединения строк Оператор объединения строк + позволяет соединить две строки в одну. Например, сценарий:s1 = "Java";s2 = "Script";s = s1 + s2;поместит в переменную s строку


8.17.5 Применение объединения маршрутов

Из книги автора

8.17.5 Применение объединения маршрутов Целью объединения маршрутов является исключение ненужной информации из удаленных таблиц маршрутизации. Провайдер может объединить маршруты, сведения о которых получены от его клиентской автономной системы.Как показано на рис. 8.25,


R.9.5 Объединения

Из книги автора

R.9.5 Объединения Объединение можно представить как структуру, все члены имеют нулевое смещения, а размер ее достаточно велик, чтобы вмещать любой из ее членов. В любой момент времени объединение может содержать только один член. В объединении могут быть функции-члены (в


Выражение объединения в SQL

Из книги автора

Выражение объединения в SQL В SQL Server объединение можно установить с помощью выражения эквивалентности между двумя полями, например:SELECT FirstName, LastName, OrderDate FROM tblOrder INNER JOIN tblCustomer ON tblOrder.CustomerID = tblCustomer.IDЭтот запрос SQL возвращает информацию обо всех клиентах, которые имеют заказы в


97. Не используйте объединения для преобразований

Из книги автора

97. Не используйте объединения для преобразований РезюмеХитрость все равно остается ложью: объединения можно использовать для получения "преобразования типа без преобразования", записывая информацию в один член и считывая из другого. Однако это еще более опасно и менее


10.5. Проблемы объединения

Из книги автора

10.5. Проблемы объединения Следующие разделы излагают различные аспекты объединений набора


10.5.6. Пример эффекта объединения

Из книги автора

10.5.6. Пример эффекта объединения Предположите, что столбец X в таблице T имеет эти значения столбца latin1:MufflerM??llerMX SystemsMySQLПредположите также, что значения столбца получены, используя следующую инструкцию:SELECT X FROM T ORDER BY X COLLATE collation_name;Следующая таблица показывает возникающий в


1. Операция объединения.

Из книги автора

1. Операция объединения. Для того чтобы реализовать операцию объединения двух отношений приходится использовать одновременно два оператора Select, каждый из которых соответствует какому-то одному из исходных отношений-операндов. И к этим двум базовым операторам Select


Объявление объединения

Из книги автора

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


Наборы, совместимые для объединения

Из книги автора

Наборы, совместимые для объединения Для каждой операции SELECT, создающей входной поток для UNION, спецификация должна содержать список столбцов, одинаковый для всех других операций (количество и порядок столбцов) с соответствующими типами данных. Предположим, мы имеем


5.4 Друзья и Объединения

Из книги автора

5.4 Друзья и Объединения В это разделе описываются еще некоторые особенности, ксающиеся классов. Показано, как предоставить функции не члену доступ к закрытым членам. Описывается, как разрешать конфлиты имен членов, как можно делать вложенные описания классов, и как


5.4.6 Структуры и Объединения

Из книги автора

5.4.6 Структуры и Объединения По определению struct – это просто класс, все члены кторого открытые, то естьstruct s (* ...есть просто сокращенная записьclass s (* public: ...Структуры используются в тех случаях, когда сокрытие данных неуместно.Именованное объединение определяется как struct, в


5.4 Друзья и Объединения

Из книги автора

5.4 Друзья и Объединения В это разделе описываются еще некоторые особенности, ксающиеся классов. Показано, как предоставить функции не члену доступ к закрытым членам. Описывается, как разрешать конфликты имен членов, как можно делать вложенные описания классов, и как


8.5.13 Объединения

Из книги автора

8.5.13 Объединения Объединение можно считать структурой, все объекты члены которой начинаются со смещения 0, и размер которой достаточен для содержания любого из ее объектов членов. В каждый момент времени в объединеии может храниться не больше одного из обектов членов.