类成员
类可以具有以下类型的成员:
备注
可使用称为访问说明符的关键字将类的成员列表分为 private、protected 和 public 部分。冒号 : 必须跟在访问说明符后面。这些部分不需要是连续的,也就是说,这些关键字中的任何一个都可能在成员列表中多次出现。关键字指定所有成员直到下一个访问说明符或右大括号的访问。
成员列表中的成员声明由分号 ; 分隔。请参阅类成员声明语法。
成员列表的目的是:
为给定类声明完整的成员集。
指定与各个类成员关联的访问(公共、私有或受保护)。
在成员列表的声明中,只可以声明一次成员;再次声明成员将生成错误消息。 由于成员列表是一个完整的成员集,因此不能将成员添加到带有后续类声明的给定类。
成员声明符不能包含初始值设定项。 提供初始值设定项将生成错误消息,如以下代码所示:
// class_members1.cpp
// C2864 expected
class CantInit
{
public:
long l = 7; // Error: attempt to initialize
// class member.
static int i = 9; // Error: must be defined and initialized
// outside of class declaration.
};
int main()
{
}
由于非静态成员数据的单独实例是为给定类类型的每个对象创建的,因此初始化成员数据的正确方式是使用类的构造函数。(构造函数在构造函数中有述。)
对于给定类类型的所有对象,只有一个静态数据成员的共享副本。 必须在文件范围内定义静态数据成员并可在此范围内将其初始化。(有关静态数据成员的详细信息,请参阅静态数据成员。)以下示例演示如何执行这些初始化:
// class_members2.cpp
class CanInit
{
public:
CanInit() { l = 7; } // Initializes l when new objects of type
// CanInit are created.
long l;
static int i;
static int j;
};
// i is defined at file scope and initialized to 15.
// The initializer is evaluated in the scope of CanInit.
int CanInit::i = 15;
// The right side of the initializer is in the scope
// of the object being initialized
int CanInit::j = i;
int main()
{
}
备注
类名 CanInit 的前面必须有 i 以指定所定义的 i 是类 CanInit 的成员。
Microsoft 专用
Microsoft C++ 允许在类定义中初始化静态整数、常量整数和常量枚举数据成员。 请参阅 Microsoft C 和 C++ 扩展。