因为s_nvalue是一个静态成员变量,s_nvalue是类的所有对象之间共享。因此,cfirst.s_nvalue是csecond.s_nvalue相同。上述计划表明,我们使用录音的价值可使用csecond!
虽然你可以通过类类型的对象访问静态成员,这有点误导。cfirst.s_nvalue意味着s_nvalue属于录音,这是真的不是这样的。s_nvalue不属于任何对象。事实上,s_nvalue存在,即使没有类的对象已经初始化!
因此,认为它是更好的静态成员属于类本身,而不是类的对象。因为s_nvalue独立存在的任何类的对象,它可以使用类的名称和作用域操作符直接访问:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Something{public: static
int
s_nValue;};int
Something::s_nValue = 1;int
main(){ Something::s_nValue
= 2; std::cout
<< Something::s_nValue; return
0;} |
在上面的代码片段中,s_nvalue引用类的名字而不是通过对象。值得注意的是,我们甚至没有实例化的对象类型的东西,但我们仍然能够访问和使用的东西::s_nvalue。这是用于访问静态成员的首选方法。
初始化静态成员变量
由于静态成员变量不是单个对象的一部分,你必须明确地定义静态成员,如果你想将它初始化为非零值。下面的线,在上面的例子中初始化静态成员1:
1
int的东西::s_nvalue = 1;
这个初始化器应放置在代码文件的类(某事。CPP)。在初始化线没有,C++将初始化值0。
静态成员变量的一个例子
为什么使用静态变量在类?一个很好的例子是分配一个唯一的标识,该类的每个实例。这是一个例子:
494

被折叠的 条评论
为什么被折叠?



