.cpp文件有一堆类定义。一个类具有私有静态成员,如下所示:
class SomeClass:public SomeParentClass
{
private:
static int count;
};
并且在定义类之后,count属性初始化为零,如下所示:
int SomeClass::count = 0;
来自Java / C#世界我无法理解count
初始化为零的哪一点?是SomeClass
实例化的时候吗?此外,类定义的count
类型为int
,为什么SomeClass::count
必须在其前面有int
?
我的最后一个问题是,因为count属性是私有的,所以当它在类定义之外初始化时,它的可见性不应受到限制吗?
谢谢
答案 0 :(得分:4)
static int count;
是静态变量的声明,而int SomeClass::count = 0;
是定义。 C ++中的所有定义都需要指定类型。SomeClass::count
的实际范围仍然是私有的,如声明的那样。答案 1 :(得分:3)
类静态变量的行为就像程序启动时初始化为0一样。它独立于类实例化。
C ++语言需要在声明中的标识符之前使用类型。
初始化类静态变量的C ++语法使它看起来像全局变量,但在编译期间强制访问变量。
答案 2 :(得分:3)
Is it when the SomeClass is instantiated?
不,您可以在任何实例化之前通过SomeClass::count
(假设该函数对SomeClass
的私有成员拥有权限)访问它。在开始制作对象之前它是完全可用的。
Why does the SomeClass::count has to have an int in front of it?
好吧,因为它是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
Since the count attribute is private shouldn't its visibility be restricted when it is initialized outside the class definition?
根据this answer,以正常方式定义时,静态变量定义是访问说明符的例外。