Чтение онлайн

на главную - закладки

Жанры

Справочное руководство по C++

Страустрап Бьярн

Шрифт:

class process {

 static int no_of_process;

 static process* run_chain;

 static process* running;

 static process* idle;

 //…

public:

 //…

 int state;

 static void reshedule;

 //…

};

Здесь

к функции reshedule можно обратиться без указания объекта класса process таким образом:

void f

{

 process::reshedule;

}

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

void process::reshedule {/*… */};

int process::no_of_process = 1;

process* process::running = get_main;

process* process::run_chain = process::running;

Статические члены подчиняются обычным правилам доступа к членам класса (§R.11), за исключением того, что их можно инициализировать в файловой области видимости.

В типе статического члена не участвует имя класса, так тип process::no_of_process есть int, а тип &process::reshedule - void(*).

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.

R.9.6 Битовые поля

Конструкция описатель-члена, имеющая вид,

идентификатор opt : выражение-константа

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

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

Безымянное поле не является членом и не может инициализироваться.

Битовые поля должны иметь целочисленный тип (§R.3.6.1). Их интерпретация зависит от того, считается ли значение поля с обычным типом int (т.е. без явного использования signed или unsigned) знаковым или беззнаковым. Операция взятия адреса & не применима к битовым полям, так что не может быть ни указателей на битовые поля, ни ссылок на них.

R.9.7 Вложенные описания классов

Класс можно описать в описании другого класса. Такой класс называют вложенным. Имя вложенного класса локально по отношению к объемлющему классу. Вложенный класс находится в области видимости объемлющего класса. Если не считать явного использования указателей, ссылок или имен объектов, то в описаниях вложенного класса допустимы только имена типов, статических членов и элементов перечисления из объемлющего класса.

int x;

int y;

class enclose {

public:

 int x;

 static int s;

 class inner {

 void f(int i)

 {

x = i; // ошибка: присваивание enclose::x

s = i; // нормально: присваивание enclose::s

::x = i; // нормально: присваивание глобальному x

y = i; // нормально: присваивание глобальному y

 }

Поделиться:
Популярные книги

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Черный дембель. Часть 4

Федин Андрей Анатольевич
4. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 4

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Санек 4

Седой Василий
4. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 4

Душелов. Том 4

Faded Emory
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Душелов. Том 4

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

И вспыхнет пламя

Коллинз Сьюзен
2. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.44
рейтинг книги
И вспыхнет пламя

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4