首页 > 代码库 > c++:静态数据成员

c++:静态数据成员

一 . 静态数据成员

类体中的数据成员的声明前加上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

c++:静态数据成员