5.4.6 Структуры и Объединения
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. – Дуг МакИлрой
В этой главе описываются возможности определения новых типов в С++, для которых доступ к данным ограничен заданным множеством функций доступа. Объясняются способы защиты струтуры данных, ее инициализации, доступа к ней и, наконец, ее уничтожения. Примеры содержат простые классы для работы с таблицей имен, манипуляции стеком, работу с множеством и релизацию дискриминирующего (то есть, «надежного») объединения. Две следующие главы дополнят описание возможностей определния новых типов в С++ и познакомят читателя еще с некоторыми интересными примерами.