静态数据成员(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。

请参见

参考

选件类、结构和联合