首页 > 其他 > 详细

静态数据成员

时间:2014-03-23 10:37:24      阅读:449      评论:0      收藏:0      [点我收藏+]

1.静态数据成员的定义。 
静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。 
其定义方式与全局变量相同。

2.静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。举例如下: 

 

bubuko.com,布布扣
 1 class base{ 
 2 public : 
 3 static int _num;//声明 
 4 }; 
 5 int base::_num=0;//静态数据成员的真正定义 
 6 
 7 class derived:public base{ 
 8 }; 
 9 
10 main() 
11 { 
12 base a; 
13 derived b; 
14 a._num++; 
15 cout<<"base class static data number _num is"<<a._num<<endl; 
16 b._num++; 
17 cout<<"derived class static data number _num is"<<b._num<<endl; 
18 } 
bubuko.com,布布扣

 


// 结果为1,2;可见派生类与基类共用一个静态数据成员。 

3.静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。举例如下: 

bubuko.com,布布扣
class base{ 
public : 
static int _staticVar; 
int _var; 
void foo1(int i=_staticVar);//正确,_staticVar为静态数据成员 
void foo2(int i=_var);//错误,_var为普通数据成员 
}; 
bubuko.com,布布扣

 

 

bubuko.com,布布扣

 

4.★静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用。举例如下: 

bubuko.com,布布扣
class base{ 
public : 
static base _object1;//正确,静态数据成员 
base _object2;//错误 
base *pObject;//正确,指针 
base &mObject;//正确,引用 
}; 
bubuko.com,布布扣

 

bubuko.com,布布扣

5.★静态数据成员的值在const成员函数中可以被合法的改变。举例如下:

bubuko.com,布布扣
 1  class base{ 
 2   public: 
 3   base(){_i=0;_val=0;} 
 4   
 5   mutable int _i; //类数据成员加上mutable后,修饰为const的成员函数就可以修改它
 6   static int _staticVal; 
 7   int _val; 
 8  void test() const{//const 成员函数 
 9  
10  _i++;//正确,mutable数据成员 
11  _staticVal++;//正确,static数据成员 
12  _val++;//错误 
13 } 
14 };
bubuko.com,布布扣

bubuko.com,布布扣

静态成员函数:

1.静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数,这是因为静态成员函数不含this指针。

2.静态成员函数是类的成员函数,该函数不属于该类申请的任何一个对象,而是所有该类成员共同共有的一个函数。

静态数据成员,布布扣,bubuko.com

静态数据成员

原文:http://www.cnblogs.com/xxiaoye/p/3615295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!