список-членов: описание-члена список-членов 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). Имя статического члена данных,элемента перечисления, члена безымянного объединения или вложенноготипа не может совпадать с именем класса.