静态数据成员(C++)
类可以包含静态数据成员和成员函数。 当数据成员声明为 静态,因此,只有数据的副本对类的所有对象维护。 (有关更多信息,请参见 静态成员函数。)
静态数据成员不属于特定类的对象的节类型;它们是单独的对象。 因此,静态数据成员的声明不被视为定义。 数据成员在类范围声明,但是,定义对文件的大小。 这些静态成员有外部链接。 下面的示例阐释了这一点:
// static_data_members.cpp
class BufferedOutput
{
public:
// Return number of bytes written by any object of this class.
short BytesWritten()
{
return bytecount;
}
// Reset the counter.
static void ResetCount()
{
bytecount = 0;
}
// Static member declaration.
static long bytecount;
};
// Define bytecount in file scope.
long BufferedOutput::bytecount;
int main()
{
}
在上面的代码中,该成员 bytecount 在类 BufferedOutput声明,但是,必须在类声明之外定义。
静态数据成员可以引用,而不是引用类类型对象。 使用 BufferedOutput 对象编写字节数可用如下所示:
long nBytes = BufferedOutput::bytecount;
对于存在这个静态成员,而不是必需的类类型的所有对象存在。 使用成员选择 (. 和 – AMP_GT) 运算符,静态成员还可以捕获。 例如:
BufferedOutput Console;
long nBytes = Console.bytecount;
在上述情况下,对对象 (Console) 的引用不计算,返回的值是静态的对象 bytecount。
静态数据成员受到类成员访问规则的限制,因此,对静态数据成员的专用访问只允许类成员函数和友元。 这些规则在 成员访问控件所述。 异常是无论它们的访问限制,静态数据成员在文件范围必须定义。 如果数据成员将显式初始化,必须提供初始值设定项了定义。
静态成员的类型未通过其类名限定。 因此, BufferedOutput::bytecount 的类型是 long。