Синтаксис объявления члена класса
Элементы данных классов и членов функции обычно указываются после правил для объявлений.Они содержат, в следующем порядке:
описатели объявления.в классах, описатели класса хранения Статический и изменяемый разрешите для элементов данных.резюме-квалификаторы Const и volatile разрешите для элементов данных и функции.описатели объявления friend" Статический" Виртуальный и Встроенная разрешите для функций, хотя friend отображает функцию non-участника.
деклараторы без инициализаторов.В случае виртуальных функций, чистый описатель формы = 0 использует после декларатор функции, чтобы определить чисто виртуальную функцию (виртуальную функцию без реализации в данном классе).
При необходимости битового поля.См. Битовые поля.
OR
- определения функции.определение функции можно включить в классе.Если функция-член также указывается, является встроенным автоматически.
OR
- Шаблоны элементов (см. примечания о шаблонах внутри элемента C++ Элементы шаблонов класса).
Данные элемента нельзя объявлять как Авто" externили регистр класс хранения.Их можно, однако объявлен как имеющий Статический класс хранения.
При объявлении a friend класс в списке членов можно опустить списке декларатора элемента.Дополнительные сведения о другах см. в разделе описатель друга и Друзья.Даже если имя класса не было вставлено, его можно использовать в выражении friend объявление.This friend объявление вставляет имя.Однако в объявлении члена для таких классов тщательно разработанный синтаксис описателя типа необходимо использовать, как показано в следующем примере:
// class_member_declaration_syntax.cpp
// compile with: /c
struct HasFriends {
friend class NotDeclaredYet;
};
В предыдущем примере список декларатора участника после объявления класса.Поскольку объявление NotDeclaredYet пока не считает, внимательно разработанный описатель типа используется форма: class NotDeclaredYet.Тип, который объявлен можно указать в a friend объявление члена с помощью описателя обычного типа:
// class_member_declaration_syntax2.cpp
// compile with: /c
struct AlreadyDeclared {};
struct HasFriends {
friend AlreadyDeclared;
};
Чистые (показанный в следующем примере описатель) показывает, что реализация не предоставляется, объявляемых виртуальной функции.Поэтому чистый описатель можно определить только на виртуальных функций.Рассмотрим следующий пример.
// class_member_declaration_syntax3.cpp
// compile with: /c
class StrBase { // Base class for strings.
public:
virtual int IsLessThan( StrBase& ) = 0;
virtual int IsEqualTo( StrBase& ) = 0;
virtual StrBase& CopyOf( StrBase& ) = 0;
};
Предыдущий Код объявляет абстрактный базовый класс, т е класс, предназначенный только для использования в качестве базового класса для конкретных классов.Эти базовые классы могут заставить заданный протокол или набор функциональных возможностей, путем объявления одного или нескольких виртуальных функций, как «чистых» с использованием чисто виртуальные функции, описатель.
Классы, наследующие от StrBase класс должен предоставлять реализации для чисто виртуальных функций; в противном случае они также являются абстрактными базовыми классами.
Абстрактные базовые классы не могут использоваться для объявления объектов.Например, перед объектом типа, унаследованного от StrBase могут быть объявлены функции IsLessThan" IsEqualToи CopyOf быть реализовано.(Дополнительные сведения об абстрактных базовых классах см. в разделе абстрактные классы.)