8.5 Описания Классов

Класс есть тип. Его имя становится typedef-имя (см. #8.8), которое может быть использовано даже внутри самого спецификатора класса. Объекты класса состоят из последовтельности членов.

спецификатор_класса: заголовок_класса (* список_членов opt *) заголовок_класса (* список_членов opt public : спсок_членов opt *)

заголовок_класса: сост идентификатор opt сост идентификатор opt : public opt typedef-имя

сост: class struct union

Объекты классов могут присваиваться, передаваться как параметры и возвращаться функциями (за исключением объектов некоторых производных типов, см. #8.5.3). Прочие действия, которые могут быть удобны, может определить пользователь, см. #8.5.11.

Структура является классом, все члены которого общие, см. #8.5.9. Объединение является структурой, содержащей в каждый момент только один член, см. #8.5.13. Список_членов может описывать друзей (8.5.10) и члены вида: данные, фунция, класс, перечисление, поле(#8.5.13). Список_членов может также содержать описания, регулирующие видимость имен членов, см. #8.5.9.

список_членов: описание_члена список_членов opt описание_члена: спецификаторы_описания 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.