静态类成员包括静态数据成员和静态函数成员两部分。

一、 静态数据成员:

类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:

1.静态数据成员的定义。

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

xxx.h文件   :

class   base{   private:   static   const   int   _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。
};     

xxx.cpp文件:

const   int   base::_i=10;//定义(初始化)时不受private和protected访问限制. 

注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef   #define   #endif或者#pragma   once也不行。 
 2.静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。举例如下:

class   base{   public   :   static   int   _num;//声明
};   int   base::_num=0;//静态数据成员的真正定义   class   derived:public   base{
};
int main()
{   base   a;   derived   b;   a._num++;   cout<<"base   class   static   data   number   _num   is"<<a._num<<endl;   b._num++;   cout<<"derived   class   static   data   number   _num   is"<<b._num<<endl;
}
//   结果为1,2;可见派生类与基类共用一个静态数据成员。  

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

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

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

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

5.★这个特性,我不知道是属于标准c++中的特性,还是vc6自己的特性。    静态数据成员的值在const成员函数中可以被合法的改变。举例如下:

class   base{   public:   base(){_i=0;_val=0;}   mutable   int   _i;   static   int   _staticVal;     int   _val;   void   test()   const{//const   成员函数   _i++;//正确,mutable数据成员   _staticVal++;//正确,static数据成员   _val++;//错误   }   };   int   base::_staticVal=0;   

二、静态成员函数   
静态成员函数没有什么太多好讲的。   
1.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用类成员函数指针来储存。举例如下:

class   base{   static   int   func1();   int   func2();   };   int   (*pf1)()=&base::func1;//普通的函数指针   int   (base::*pf2)()=&base::func2;//成员函数指针   

2.静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。   
3.静态成员函数不可以同时声明为   virtual、const、volatile函数。举例如下:

 class   base{   virtual   static   void   func1();//错误   static   void   func2()   const;//错误   static   void   func3()   volatile;//错误   };   

最后要说的一点是,静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。

【C++基础学习】关于C++静态数据成员相关推荐

  1. C++学习(五) 静态数据成员和静态成员函数

    文章目录 1.静态成员: 1.1.说明 1.2.格式 2.静态成员函数 2.1.说明 2.2.格式 1.静态成员: 1.1.说明 静态成员包括静态数据和静态成员函数. (1).静态数据成员的定义与普通 ...

  2. c++远征之模板篇——静态数据成员,静态成员函数

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.静态数据成员 (1)不同于普通的数据成员,静态数据成员在没有实例化时,它也是存在的(即它是和类共存的): (2)它一般不依赖于构造函数的初始化 ...

  3. 静态数据成员和静态成员函数

    转载自:https://blog.csdn.net/computer_liuyun/article/details/29235111 c++中的static静态数据成员和静态成员函数应该是让大家比较头 ...

  4. 【C++之静态数据成员和静态成员函数】计算商品总销售款和平均售价

    题目要求 商店销售某一商品,商店每天公布统一的折扣(discount).同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购 10 件以上者,还可以享受 9.8 折优惠.现已知当天 ...

  5. 不能定义声明dllimport_不允许 dllimport 静态数据成员

    View Code "CTest::~CTest" : 不允许 dllimport 函数 的定义 "CTest::CTest" : 不允许 dllimport ...

  6. 静态数据成员和静态数据成员函数

    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西.我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂 ...

  7. c++对象长度之静态数据成员(3)

    当类中定义了静态数据成员.当类中定义了静态数据成员时,由于静态数据成员与静态变量原理相同(是一个含有作用域的特殊全局变量),因此该静态数据成员的初值会被写入编译链接后的执行文件中.当程序被加载时,操作 ...

  8. C++静态数据成员和静态成员函数

    在C++面向对象编程过程当中,对象与对象之间的数据不是共享,在设计类的时候,有时候需要一些对象之间共享的数据,除了把所要共享的数据设置为全局数据或者函数之外,还可以利用C++的静态机制. 1.静态数据 ...

  9. Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义

    在使用一个继承自QObject带有Q_OBJECT宏的导出类时,编译报错:不允许 dllimport 静态数据成员 的定义. 原因是自动生成的moc文件带有静态函数,无法导出. 1.在Qt中的解决办法 ...

最新文章

  1. 单链表的基本操作(增删查总结)
  2. ▽算符在球坐标系_球坐标系下的角动量算符
  3. tcp的无延时发送_腾讯网红程序员,详解带宽、延时、吞吐率、PPS 这些都是啥?...
  4. Window下git生成SSH Key以及格式转换
  5. Faster-RCNN的一些记录。
  6. 计算机应用基础考证理论知识,《计算机应用基础》考试大纲
  7. 车和家李想:特斯拉加州经验难以直接复制到国内
  8. 【Spring】SpringMVC 作用域传值的 4 种方式
  9. Mycat实现Mysql的一主一从和双主双从读写分离
  10. 使用JasperReport+iReport进行Web报表开发
  11. python 制作聊天程序-python实现点对点聊天程序
  12. Linux 命令完全手册
  13. [绍棠] Xcode9无线调试教程
  14. 知识图谱 helloword
  15. PWN mistake [pwnable.kr]CTF writeup题解系列8
  16. 网站漏洞修复公司 对网站上传文件漏洞的修复与安全加固
  17. ae导出html,动画还原100%-AE一键导出
  18. SSM项目大作业——网上订餐系统
  19. S3C2440 SDRAM驱动配置编程
  20. 图像分割-种子区域生长

热门文章

  1. python处理带有‘\x‘的字符串,拆分,解码,重组
  2. linux 修I改资源限制1024,Re:如何解决1024的限制???
  3. 富文本编辑器CKEditor配置及使用 - 转载篇
  4. Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数【含代码】)- 案例篇
  5. MUI框架:移动端底部固定mui-bar-tab布局 - 案例篇
  6. ubuntu 串口调试工具推荐_谈一谈单片机开发的几种调试方案
  7. easyui-super-theme后台模板
  8. 原神抽卡记录分析工具源码全开源
  9. access month函数用法_小白进阶必备的10组函数公式实用技巧解读,有案例和详情解读哦!...
  10. 实用常识 | 文件都在C盘,一点儿都不圆润,盘它!