4

一个 .cpp 文件有一堆类定义。一个类有一个私有静态成员,如下所示:

class SomeClass:public SomeParentClass
{
   private:
     static int count;
};

并且在定义类之后,count 属性初始化为零,如下所示:

int SomeClass::count = 0;

来自 Java/C# 世界,我无法理解在哪一点count初始化为零?是在SomeClass实例化的时候吗?另外,类定义的count类型是int,为什么前面SomeClass::count必须有一个?int

我的最后一个问题是,由于 count 属性是私有的,当它在类定义之外初始化时,它的可见性不应该受到限制吗?

谢谢

4

3 回答 3

4
  1. 类的静态成员在程序启动时以任意顺序初始化
  2. static int count;类中的 是静态变量的声明,而是int SomeClass::count = 0;它的定义。C++ 中的所有定义都需要指定类型。
  3. 事实上,计数的定义似乎已经发生在文件范围内,实际范围SomeClass::count仍然是私有的,如声明的那样。
于 2012-07-11T04:33:16.510 回答
3

当程序启动时,类静态变量的行为就好像它被初始化为 0。它独立于类实例化。

C++ 语言要求在声明中的标识符之前有一个类型。

初始化类静态变量的 C++ 语法使它看起来像一个全局变量,但在编译期间强制访问该变量。

于 2012-07-11T04:28:18.340 回答
3
是在 SomeClass 被实例化的时候吗?

不,您可以在任何实例化之前通过SomeClass::count(假设该函数对SomeClass的私有成员具有权限)访问它。在您开始制作对象之前,它是完全可用的。


为什么 SomeClass::count 前面必须有一个 int ?

好吧,因为它是一个int. 想想当你制作函数原型和定义时:

int func (int);
int func (int i) {return 1;} //you still need the int and (int i) here
func {return 1;} //NOT VALID - this is what count would be without int

由于 count 属性是私有的,它的可见性不应该是   
在类定义之外初始化时受到限制?

根据这个答案,静态变量定义是在以正常方式定义时访问说明符的例外。

于 2012-07-11T04:30:30.107 回答