一 . 静态数据成员
类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其它数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态成员还具有以下特点:
1. 静态数据成员的定义。
静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义不应该被放在头文件中。静态数据成员初始化时不受private和protected访问限制。
注意:不要试图在头文件中定义静态数据成员。在大多数情况下,这样做会引起重复定义这样的错误。
2. 静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象和基类对象共享基类的静态数据成员。
1 #include<iostream> 2 using namespace std; 3 4 class base{ 5 public: 6 static int _num; 7 }; 8 9 int base::_num = 0; 10 11 class derived : public base 12 { 13 }; 14 15 int main() 16 { 17 base a; 18 derived b; 19 a._num++; 20 cout << "base class static data _num is : " << a._num << endl; 21 b._num++; 22 cout << "derived class static data _num is : " << b._num << endl; 23 return 0;
[zengtx@cmm03node02 test]$./a.out base class static data _num is : 1 derived class static data _num is : 2
由以上程序的执行结果可知,派生类和基类的对象共用一个静态数据成员。
3. 静态数据成员可以成为成员函数的可选参数,而普通成员函数则不可以。
4. 静态数据成员的类型可以是所属类的类型,而普通数据成员却不可以。
1 class base{ 2 public: 3 static base _object1; // 正确,静态数据成员 4 base _object2; // 错误 5 };
参考
http://www.jb51.net/article/72387.htm
http://www.jb51.net/article/41775.htm