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

We use cookies. Read the Privacy and Cookie Policy

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

По определению struct – это просто класс, все члены кторого открытые, то есть

struct s (* ...

есть просто сокращенная запись

class s (* public: ...

Структуры используются в тех случаях, когда сокрытие данных неуместно.

Именованное объединение определяется как struct, в котрой все члены имеют один и тот же адрес (см. #с.8.5.13). Если известно, что в каждый момент времени нужно только одно знчение из структуры, то объединение может сэкономить пространство. Например, можно определить объединение для хранения лексических символов C компилятора: union tok_val (* char* p; // строка char v[8]; // идентификатор (максимум 8 char) long i; // целые значения double d; // значения с плавающей точкой *);

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

void strange(int i) (* tok_val x; if (i) x.p = "2"; else x.d = 2; sqrt(x.d); // ошибка если i != 0 *)

Кроме того, объединение, определенное так, как это, нельзя инициализировать. Например:

Глава 5 Классы

Эти типы не «абстрактны», они столь же реальны, как int и float. – Дуг МакИлрой

В этой главе описываются возможности определения новых типов в С++, для которых доступ к данным ограничен заданным множеством функций доступа. Объясняются способы защиты струтуры данных, ее инициализации, доступа к ней и, наконец, ее уничтожения. Примеры содержат простые классы для работы с таблицей имен, манипуляции стеком, работу с множеством и релизацию дискриминирующего (то есть, «надежного») объединения. Две следующие главы дополнят описание возможностей определния новых типов в С++ и познакомят читателя еще с некоторыми интересными примерами.