标签:
1. 成员变量的回顾
(1)通过对象名能够访问public成员变量
(2)每个对象的成员变量都是专属的
(3)成员变量不能在对象之间共享
2. 静态成员变量
(1)C++中的静态成员变量
①静态成员变量属于整个类所有
②静态成员函变量的生命期不依赖于任何对象
③可以通过对象名,也可以通过类名直接访问公有静态成员变量
④所有对象共享类的静态成员变量
(2)静态成员变量的特性
①在定义时直接通过static关键字修饰
②静态成员变量在程序内部位于全局数据区,所以需要类外为其单独分配空间。(因为new或栈中的对象只会为非静态成员分配空间,而不会为静态成员分配,所以必须在类外单独为其分配空间)
③为静态成员变量分配空间的语法规则:
Type ClassName::VarName = value;//要像定义全局变量一样放在函数外
【编程实验】静态成员变量的使用
#include <stdio.h> class Test { private: static int cCount; public: Test(){cCount++;} ~Test(){--cCount;} int getCount(){return cCount;} }; //使用前必须在类外给静态成员变量分配空间 int Test::cCount = 0; //表明要在全局区,而且只能在全局区分配空间,并初始化为0 Test gTest; //cCount增加1 int main() { //int Test::cCount = 0;错误,试图在这里为静态成员分配空间 Test t1; //cCount增加1 Test t2; //cCount增加1 printf("sizeof(Test) = %d, sizeof(t1) = %d\n", sizeof(Test), sizeof(t1)); //等于1,表示cCount是在全局区分配空间, //该变量不属于某个对象本身的。 printf("count = %d\n", gTest.getCount());//3,通过对象名访问static成员变量 printf("count = %d\n", t1.getCount()); printf("count = %d\n", t2.getCount()); Test* pt = new Test(); //cCount增加1 printf("count = %d\n", pt->getCount()); //4 delete pt; //cCount减1 printf("count = %d\n", pt->getCount()); //3 //printf("count = %d\n", Test::cCount);//错误,通过类名只能访问公有的static成员变量 return 0; }
3. 小结
(1)类中可以通过static关键字定义静态成员变量
(2)静态成员变量隶属于类所有
(3)每一个对象都可以访问静态成员变量
(4)静态成员变量在全局数据区分配空间
(5)静态成员变量的生命期为程序运行期
标签:
原文地址:http://www.cnblogs.com/5iedu/p/5397232.html