【概念】静态成员

一、概念

当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。

静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。

 1 #include <iostream>
 2  
 3 using namespace std;
 4  
 5 class Box
 6 {
 7    public:
 8       static int objectCount;
 9       // 构造函数定义
10       Box(double l=2.0, double b=2.0, double h=2.0)
11       {
12          cout <<"Constructor called." << endl;
13          length = l;
14          breadth = b;
15          height = h;
16          // 每次创建对象时增加 1
17          objectCount++;
18       }
19       double Volume()
20       {
21          return length * breadth * height;
22       }
23    private:
24       double length;     // 长度
25       double breadth;    // 宽度
26       double height;     // 高度
27 };
28  
29 // 初始化类 Box 的静态成员
30 int Box::objectCount = 0;
31  
32 int main(void)
33 {
34    Box Box1(3.3, 1.2, 1.5);    // 声明 box1
35    Box Box2(8.5, 6.0, 2.0);    // 声明 box2
36  
37    // 输出对象的总数
38    cout << "Total objects: " << Box::objectCount << endl;
39  
40    return 0;
41 }

当上面的代码被编译和执行时,它会产生下列结果:

Constructor called.
Constructor called.
Total objects: 2

 

二、静态成员和非静态成员的区别

https://www.cnblogs.com/hmdyc/p/6601766.html

 

三、初始化

类中特殊成员变量的初始化问题:

  • 常量变量:必须通过构造函数参数列表进行初始化。
  • 引用变量:必须通过构造函数参数列表进行初始化。
  • 普通静态变量:要在类外通过"::"初始化。
  • 静态整型常量:可以直接在定义的时候初始化。
  • 静态非整型常量:不能直接在定义的时候初始化。要在类外通过"::"初始化。
posted @ 2020-11-09 19:10  不溯流光  阅读(337)  评论(0编辑  收藏  举报