通常,按照声明规则来声明类数据成员和函数成员。它们按此顺序包含:
声明说明符。在类中,数据成员可以使用存储类说明符 static 和 mutable。数据和函数成员可以使用 cv 限定符 const 和 volatile。函数可以使用声明说明符 friend、static、virtual 和 inline,但 friend 指示非成员函数。
没有初始值设定项的声明符。对于虚函数,形式为 = 0 的纯说明符在函数声明符后使用以指定纯虚函数(一个在该类中未实现的虚函数)。
(可选)位域。请参阅位域。
OR
- 函数定义。函数的定义可包含在类中。如果如此定义成员函数,则会自动将其视为内联。
OR
- 成员模板(请参阅类模板的成员中有关 C++ 成员模板的注释)。
成员数据不能声明为 auto、extern 或 register 存储类。 但可将其声明为具有 static 存储类。
在成员列表中声明 friend 类时,您可以忽略成员声明符列表。 有关友元的详细信息,请参阅友元说明符和友元。 即使尚未引入类名,它也可用于 friend 声明中。 此 friend 声明引入该名称。 但是,在此类的成员声明中,必须使用详细类型说明符语法,如下面的示例所示:
// class_member_declaration_syntax.cpp
// compile with: /c
struct HasFriends {
friend class NotDeclaredYet;
};
在前面的示例中,类声明后没有成员声明符列表。 由于未处理 NotDeclaredYet 的声明,因此将使用详细类型说明符形式:class NotDeclaredYet。 可以使用正常类型说明符在 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 类继承的类必须为纯虚函数提供实现;否则,它们也将被视为抽象基类。
抽象基类不能用于声明对象。 例如,必须先实现函数 IsLessThan、IsEqualTo 和 CopyOf,然后才能声明从 StrBase 继承的类型的对象。(有关抽象基类的详细信息,请参阅抽象类。)