R Справочное руководство по С++

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.

Нестатические члены класса, представляющие данные и описанные подряд и без использования спецификации-доступа, размещаются внутри объекта типа класс так, что позже описанные члены имеют большие адреса. Порядок размещения таких членов, если их описание перемежается описаниями со спецификацией-доступа, зависит от реализации ($$R.11.1). Принятые в реализации правила выравнивания могут привести к тому, что два соседних члена не будут располагаться сразу друг за другом. К этому же могут привести правила выделения памяти для виртуальных функций ($$R.10.2) и виртуальных базовых классов ($$R.10.1); см. также $$R.5.4.

Функция-член ($$R.9.3), имя которой совпадает с именем класса, является конструктором ($$R.12.1). Имя статического члена данных, элемента перечисления, члена безымянного объединения или вложенного типа не может совпадать с именем класса.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.