Справочное руководство по C++ | страница 55
Конструкция имя-typedef (§R.7.1.3) обозначает класс и считается именем-класса, см. также §R.7.1.3.
R.9.2 Члены класса
>список-членов:
> описание-члена список-членов >opt
> спецификация-доступа : список-членов >opt
>описание-члена:
> спецификации-описания opt список-описателей-членов >opt ;
> определение-функции ; >opt
> уточненное-имя ;
>список-описателей-членов:
> описатель-члена
> список-описателей-членов , описатель-члена
>описатель-члена:
> описатель спецификация-чистой >opt
> идентификатор >opt : выражение-константа
>спецификация-чистой:
> = 0
С помощью конструкции список-членов можно описать данные, функции, классы, элементы перечисления (§R.7.2), битовые поля, друзей (§R.11.4) и имена типов (§R.7.1.3, §R.9.1). Кроме того, список-членов может содержать описания, устанавливающие доступ к именам членов, см. §R.11.3. Никакой член не может быть дважды описан в списке-членов. Список-членов определяет все множество членов данного класса, т.е. нельзя добавить еще один член в каком-либо другом описании.
Отметим, что одно имя может обозначать несколько функций-членов при условии, что их типы достаточно отличаются друг от друга (§R.13). Укажем, что описатель-члена не может содержать инициализатора (§R.8.4). Инициализация члена возможна с помощью конструктора, см. §R.12.1.
Член не может иметь спецификацию auto, extern или register.
Конструкция спецификации-описания может отсутствовать только в описании функции. Конструкция список-описателей-членов может опускаться только после конструкций спецификация-класса, спецификация-перечисления или спецификация-описания, если последняя имеет вид friend спецификация-сложного-типа. Конструкция спецификация-чистой используется только при описании виртуальной функции (§R.10.2).
Если члены являются объектами классов, то эти классы должны быть ранее описаны. В частности, класс C1 не может содержать объект класса C1, но может содержать указатель или ссылку на класс C1. Если в типе нестатического члена используется массив, то все размеры всех индексов массива должны быть указаны.
Приведем простой пример описания класса:
>struct tnode {
> char tword[20];
> int count;
> tnode *left;
> tnode *right;
>};
Здесь класс содержит массив из двадцати символов, целое и два указателя на ту же структуру. После появления такого описания следующее:
>tnode s, *sp;
задает s как объект типа tnode и sp как указатель на tnode. С учетом этих описаний s-›count обозначает член count структуры, на которую указывает sp; s.left обозначает указатель left на поддерево структуры s; s.right-›tword[0] обозначает первый символ члена tword поддерева структуры s, на которую указывает right.