初始化静态成员变量

因为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:

这个初始化器应放置在代码文件的类(某事。CPP)。在初始化线没有,C++将初始化值0。

静态成员变量的一个例子

为什么使用静态变量在类?一个很好的例子是分配一个唯一的标识,该类的每个实例。这是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Something
{
private :
     static int s_nIDGenerator;
     int m_nID;
public :
     Something() { m_nID = s_nIDGenerator++; }
 
     int GetID() const { return m_nID; }
};
 
int Something::s_nIDGenerator = 1;
 
int main()
{
     Something cFirst;
     Something cSecond;
     Something cThird;
 
     using namespace std;
     cout << cFirst.GetID() << endl;
     cout << cSecond.GetID() << endl;
     cout << cThird.GetID() << endl;
     return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值