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