Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Объединения

Мы возвращаемся к объединениям. Наш уровень знаний делает знакомство с этой конструкцией приятным и лёгким.

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

  • объединение может включать функции-члены, в том числе конструкторы и деструкторы. Они, безусловно, могут быть полезны для обслуживания единственного значения объекта-представителя объединения;
  • объединение не может иметь базовых классов и само также не может служить базовым классом. По этой причине в объединения не могут входить виртуальные функции (они бесполезны);
  • объединения также не могут включать статические данные-члены, объекты-представители некоторого класса со специально объявленными конструкторами, деструкторами, операторными функциями присваивания. Всё это служит помехой компактному сохранению значений.

Неименованное объединение определяет объект, а не объявляет тип. Имена членов безымянного объединения должны отличаться от других имён из области действия, где было объявлено это объединение. Безымянное объединение не содержит объявления функций-членов.

В своей области действия имена членов объединения используются непосредственно без обычных операций обращения. Глобальное безымянное объединение объявляется как статическое. Всякий раз это всего лишь универсальный многофункциональный "контейнер" для хранения значений различных типов в одной и той же области памяти.

Этот раздел мы завершим примером, который раскрывает неожиданные возможности использования объединения. Сочетание объединения с битовым полем позволит нам убедиться в корректности преобразований дробной части вещественного числа. Здесь самое время обратиться к соответствующему приложению.

#include <iostream.h>
 union
  {
   float floatVal;
  struct
   {
    int bit0  : 1;
    int bit1  : 1;
    int bit2  : 1;
    int bit3  : 1;
    int bit4  : 1;
    int bit5  : 1;
    int bit6  : 1;
    int bit7  : 1;
    int bit8  : 1;
    int bit9  : 1;
    int bit10 : 1;
    int bit11 : 1;
    int bit12 : 1;
    int bit13 : 1;
    int bit14 : 1;
    int bit15 : 1;
    int bit16 : 1;
    int bit17 : 1;
    int bit18 : 1;
    int bit19 : 1;
    int bit20 : 1;
    int bit21 : 1;
    int bit22 : 1;
    int bit23 : 1;
    int bit24 : 1;
    int bit25 : 1;
    int bit26 : 1;
    int bit27 : 1;
    int bit28 : 1;
    int bit29 : 1;
    int bit30 : 1;
    int bit31 : 1;
   } BitField;
} MyUnion;
void main ()
{
 MyUnion.BitField.bit31 = 0;
 MyUnion.BitField.bit30 = 1;
 MyUnion.BitField.bit29 = 0;
 MyUnion.BitField.bit28 = 0;
 MyUnion.BitField.bit27 = 0;
 MyUnion.BitField.bit26 = 0;
 MyUnion.BitField.bit25 = 1;
 MyUnion.BitField.bit24 = 1;
 MyUnion.BitField.bit23 = 0;
 MyUnion.BitField.bit22 = 0;
 MyUnion.BitField.bit21 = 1;
 MyUnion.BitField.bit20 = 1;
 MyUnion.BitField.bit19 = 0;
 MyUnion.BitField.bit18 = 0;
 MyUnion.BitField.bit17 = 1;
 MyUnion.BitField.bit16 = 0;
 MyUnion.BitField.bit15 = 0;
 MyUnion.BitField.bit14 = 0;
 MyUnion.BitField.bit13 = 1;
 MyUnion.BitField.bit12 = 0;
 MyUnion.BitField.bit11 = 0;
 MyUnion.BitField.bit10 = 0;
 MyUnion.BitField.bit9  = 0;
 MyUnion.BitField.bit8  = 0;
 MyUnion.BitField.bit7  = 0;
 MyUnion.BitField.bit6  = 0;
 MyUnion.BitField.bit5  = 0;
 MyUnion.BitField.bit4  = 0;
 MyUnion.BitField.bit3  = 0;
 MyUnion.BitField.bit2  = 0;
 MyUnion.BitField.bit1  = 0;
 MyUnion.BitField.bit0  = 0;
 cout << MyUnion.floatVal << endl;
}

Назад | Содержание | Вперед

 

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...