216 __ Часть II. Программирование на C++
int& operator[]( unsigned int j);
// см.главу 16 "Перегрузка операций" // ... другие функции-члены };
Поскольку const требует задания начального значения, но не позволяет задавать его на этом этапе, использование постоянных элементов класса невозможно. Однако, чтобы достичь желаемого результата и избежать загромождения глобального пространства имен, можно попробовать фокус с enum. Надо просто добавить перечислимое значение, без списка, к этому классу. Вот модернизированная структура:
Struct INT_ARRAY {
enum ( МАХ = 100 };
int data[MAX] ;
int& operator[]( unsigned int j); // Получилось!
// и так далее... };
Замечание
Хотя в классах нельзя использовать const в явном виде, как уже говорилось, можно достичь желаемых результатов с помощью enum. Кроме того, можно использовать постоянные ссылки, но они должны быть инициализированы, поскольку значения им не могут присваиваться в классах.
! Предупреждение
Вышеприведенный тип INT_ARRAY не является классом — это структура (struct). Разница между ними тонка и обычно для определения типов классы предпочтительнее. Здесь сделано по-другому, чтобы не загромождать пример "новыми"идеями.
В этой книге составные типы в основном задаются как классы. Различия между классами и структурами весьма существенны, и в реальных программах они не столь уж взаимозаменяемы.
typedef
Спецификатор typedef не определяет нового типа. Он используется для создания псевдонима существующего типа или для упрощения сложного типа, могущего затруднить чтение программы. Только в редких ^случаях и у старых версий компиляторов могли возникать некоторые трудности при разборе чрезмерно усложненных типов. Обычно псевдонимы, определенные через typedef, создаются именно для удобства людей, читающих программу.
Программы производства фирмы Microsoft, включающие большой объем функций Windows SDK (Software Developer's Kit, Инструментарий програм-