成员变量的回顾:
新的需求:
使用全局变量可以解决这个问题,但是使用全局变量在当代的软件开发中是不受欢迎的。
静态成员变量:
静态成员变量的生命期如同全局变量一样,就是程序的运行周期。
由于静态成员变量不属于某个对象,而是属于这个类的,因此,静态成员变量不可能占用对象的空间,所以静态成员变量只能在类外单独的分配空间。
静态成员变量在程序内部位于全局数据区。
示例:
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行,编译运行结果如下:
小结: