1、类中的静态成员变量
所谓类中的静态成员变量,也就是类中使用static关键字来修饰的成员变量,针对静态成员变量,大致有以下几点需要注意:
* static修饰的静态成员变量不属于任何一个对象,是该类本身的内容
* 存储上,静态成员变量会被分配在全局数据区,在程序运行期间均有效
* 初始化上,静态成员变量由于不数据任何一个实体对象,是当前类的所有类对象所共有的成员变量,它的初始化要在类外进行,初始化方式类似于类的成员方法的类外定义方式,如:int Test::mi = 0;
* 使用上,一方面,该类的任意一个实体对象均可对其进行访问,另一方面,我们也可以通过类名直接访问该类中定义的共有静态成员变量,如:Test::mi;
小例:
1 #include <stdio.h>
2
3 class Test
4 {
5 static int _count;
6 public:
7 Test()
8 {
9 _count++;
10 }
11 ~Test()
12 {
13 --_count;
14 }
15 int getCount()
16 {
17 return _count;
18 }
19 };
20
21 int Test::_count = 0;
22
23 Test gT;
24
25 int main(int argc, char** argv)
26 {
27 Test t1;
28 Test t2;
29
30 printf("_count = %d\n", gT.getCount());
31 printf("_count = %d\n", t1.getCount());
32 printf("_count = %d\n", t2.getCount());
33
34 Test* pT = new Test;
35
36 printf("_count = %d\n", pT->getCount());
37
38 delete pT;
39
40 printf("_count = %d\n", t2.getCount());
41
42 return 0;
43 }
2、静态成员方法
同样的,对比用static修饰的静态成员变量,类中的成员方法若在声明时使用了static修饰,则该成员方法就成为了静态成员方法,对于静态成员方法,一般的,有以下几点需要注意:
* 除了使用已经存在的类对象来访问类中的成员方法之外,我们也可以直接使用类名来访问类中的公有成员方法,如Test::getCount();
* 静态成员方法在隶属于类本身,和普通的成员方法相比较,静态成员方法在使用时没有隐含的this指针传入,因此静态成员方法只能访问类中的其它静态成员方法和静态成员变量(即不可访问普通的成员方法和变量)
小例:
1 #include <stdio.h>
2
3 class Test
4 {
5 static int _count;
6 public:
7 Test()
8 {
9 _count++;
10 }
11 ~Test()
12 {
13 --_count;
14 }
15 static int getCount()
16 {
17 return _count;
18 }
19 };
20
21 int Test::_count = 0;
22
23 int main(int argc, char** argv)
24 {
25 printf("_count = %d\n", Test::getCount()); // 通过类名直接调用静态成员方法访问静态成员变量
26
27 Test t1;
28 Test t2;
29
30 printf("_count = %d\n", t1.getCount());
31 printf("_count = %d\n", t2.getCount());
32
33 Test* pT = new Test;
34
35 printf("_count = %d\n", pT->getCount());
36
37 delete pT;
38
39 printf("_count = %d\n", t2.getCount());
40
41 return 0;
42 }