第25课 类的静态成员变量

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第25课 类的静态成员变量相关的知识,希望对你有一定的参考价值。

成员变量的回顾:

技术分享图片

 

 

新的需求:

技术分享图片

使用全局变量可以解决这个问题,但是使用全局变量在当代的软件开发中是不受欢迎的。

静态成员变量:

技术分享图片

 

静态成员变量的生命期如同全局变量一样,就是程序的运行周期。

技术分享图片

 

 

由于静态成员变量不属于某个对象,而是属于这个类的,因此,静态成员变量不可能占用对象的空间,所以静态成员变量只能在类外单独的分配空间。

静态成员变量在程序内部位于全局数据区。

示例:

 1 #include <stdio.h>
 2 
 3 class Test
 4 {
 5 private:
 6     static int cCount;
 7 public:
 8     Test()
 9     {
10         cCount++;
11     }
12     ~Test()
13     {
14         --cCount;
15     }
16     int getCount()
17     {
18         return cCount;
19     }
20 };
21 
22 int Test::cCount = 0;
23 
24 Test gTest;
25 
26 int main()
27 {
28     Test t1;
29     Test t2;
30     
31     printf("count = %d
", gTest.getCount());
32     printf("count = %d
", t1.getCount());
33     printf("count = %d
", t2.getCount());
34     
35     Test* pt = new Test();
36     
37     printf("count = %d
", pt->getCount());
38     
39     delete pt;
40     
41     printf("count = %d
", gTest.getCount());
42     
43     return 0;
44 }

如果没有第22行的类的静态成员变量在类外的定义,则编译器会报错:

技术分享图片

编译器提示没有办法访问到这个类里面的cCount,找不到存储空间,因为在这个类里面我们只进行了声明,并没有在类外定义,也就是不存在存储空间。

正常定义22行,编译运行结果如下:

技术分享图片

 

 小结:

技术分享图片

 

以上是关于第25课 类的静态成员变量的主要内容,如果未能解决你的问题,请参考以下文章

第24课经典问题解析(下)--------类的成员函数和成员变量隶属某个具体对象吗

随笔25 java中的类加载顺序

java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数

第53课 被遗弃的多重继承

java 静态代码块 代码块 构造函数 静态成员变量 成员变量的初始化顺序

C++--类的静态成员变量