Описания классов
Класс специфицирует тип. Его имя становится typedef-имя (см. ), которое может быть использовано даже внутри самого спецификатора класса. Объекты класса состоят из последовательности членов.
спецификатор_класса: заголовок_класса { список_членов opt } заголовок_класса { список_членов opt public : список_членов opt }
заголовок_класса: агрег идентификатор opt агрег идентификатор opt : public opt typedef-имя агрег: class struct union
Структура является классом, все члены которого общие; см. . Объединение является классом, содержащим в каждый момент только один член; см. . Список членов может описывать члены вида: данные, функция, класс, определение типа, перечисление и поле. Поля обсуждаются в . Список членов может также содержать описания, регулирующие видимость имен членов; см. .
список_членов: описание_члена список_членов opt описание_члена: спецификаторы_описания opt описатель_члена; описатель_члена: описатель идентификатор opt : константное_выражение
Члены, являющиеся классовыми объектами, должны быть объектами предварительно полностью описанных классов. В частности, класс cl не может содержать объект класса cl, но он может содержать указатель на объект класса cl.
Имена объектов в различных классах не конфликтуют между собой и с обычными переменными.
Вот простой пример описания структуры:
struct tnode { char tword[20]; int count; tnode *left; tnode *right; };
содержащей массив из 20 символов, целое и два указателя на такие же структуры. Если было дано такое описание, то описание
tnode s, *sp
описывает s как структуру данного сорта и sp как указатель на структуру данного сорта. При наличии этих описаний выражение
sp-count
ссылается на поле count структуры, на которую указывает sp;
s.left
ссылается на указатель левого поддерева структуры s; а
s.right-tword[0]
ссылается на первый символ члена tword правого поддерева структуры s.