一、静态数据成员

       类中的数据成员声明前加上static,则表示该数据成员为静态数据成员。除了与其他数据具有相同的public/private/protect访问属性外,还有一些其他的属性:
       1、不能在类中进行初始化,只能在类外。
          因为静态数据成员为所有类对象公有(包括派生类),不占用类对象的存储空间。若在类中初始化,容易造成对其他对象中该数据成员的影响。
       2、可以直接通过类名来访问:如:base::_staticVar
       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、静态数据成员的值在const成员函数中可以被合法的改变。举例如下:

class base{
public:
base(){_i=0;_val=0;} mutable int _i;
static int _staticVal;
int _val;
void test() const <span style="font-family: Arial, Helvetica, sans-serif;">//const 成员函数</span>
<span style="font-family: Arial, Helvetica, sans-serif;">{ </span>
_i++; //正确,mutable数据成员
_staticVal++;//正确,static数据成员
_val++;//错误
}
};
int base::_staticVal=0; 

二、静态成员函数

    静态成员函数也是在函数的声明前加上static关键词,具有以下特点:
     1、静态数据成员函数不能访问非静态数据成员和非静态成员函数
          因为静态成员函数中不包括this指针,所以不能访问非静态数据成员和非静态成员函数。但是可以通过参数传递一个对象名来实现在静态成员函数中访问非静态数据成员和非静态成员函数。
     2、静态成员函数不可以同时声明为 virtual、const、volatile函数。
class MyClass
{private:int a,b,c;static int Sum;static MyClass m;//MyClass mi;public:MyClass(int a,int b,int c);void GetSum() const;//virtual static int list(MyClass&); //错误 //static int uu(MyClass&) cosnt;  // 错误//static int uu(MyClass&) volatile; //错误 };

参考文献:

      1、http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html
      2、http://blog.csdn.net/clc4210408/article/details/6775824

类的静态数据成员和静态成员函数浅析相关推荐

  1. 类的静态数据成员和静态成员函数

    一.什么是类的静态成员 静态成员变量和全局变量都存储在全局/静态区,它们都是在程序编译时创建,直到编译结束才被收回.所以全局变量和静态成员变量的功能差不多,只是创建的方式不同,类的静态成员创建在类中, ...

  2. C++类的静态数据成员和静态成员函数

    目录 公有属性 静态数据成员 静态成员函数 公有属性 一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相 ...

  3. [C++] 类的静态成员 (静态数据成员 和 静态成员函数)

    目录 一.声明静态成员: 二.定义静态成员: 三.使用类的静态成员: 四.静态成员类内初始化: 五.静态成员与普通成员的区别: 六.案例代码: 类内的静态成员包括: 静态数据成员 和 静态成员函数. ...

  4. 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类 ...

  5. 3-6 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题 ...

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

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

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

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

  8. 静态数据成员和静态成员函数(static)

    目录 一.关于静态成员 二.静态数据成员和普通数据成员的共同点 三.为什么要使用静态数据成员 四.关于静态数据成员的初始化 五. 静态成员的访问方式 六.静态成员函数 1.与静态数据成员不同,静态成员 ...

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

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

最新文章

  1. vs发布免安装文件_戒掉PC,免pc开发,cloud ide and debug设想
  2. 人人都在加注芯片,英特尔却一头扎向医疗
  3. Java几种常见的编码方式
  4. 反思代码能力提升方法:重构 多写 知识面
  5. 不能输入_为什么稳压器输入端不能配漏电保护器
  6. Dell XP版本在非Dell机子上的激活问题
  7. html中水印影响文字复制,HTML中文字水印的清除方法_HTML教程
  8. mysql 取年月日 语句_MySQL学习从这里出发!
  9. 上传 mp4 格式判断_视频如何转换成通用的MP4格式?按下这个键,10秒就能搞定...
  10. Windows下SVN回滚到旧版本(TortoiseSVN)
  11. 如何建立一个利于SEO的网站
  12. 【异常(待解决)】org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond
  13. 计算机网络专业学python_「非计算机专业」小白如何学好Python?
  14. 非root用户安装java版本
  15. 前后端分离项目部署_不用Docker前后端分离项目如何快速部署
  16. R语言读取(加载)txt格式数据为dataframe、依据学号字段从dataframe随机抽取10位同学的数据
  17. 个人网站怎么建设,个人网站建设流程
  18. Character与char的区别
  19. c++复习——侯捷版
  20. 一个web前端专科生面试后的感概

热门文章

  1. 手机上的算法优化 —— CPU绑定(CPU affinity)
  2. 模块式柔性自动化生产线实训系统
  3. h5/wap端调试、移动端调试 / vconsole、eruda、spy-debugger
  4. (万能通用模板)--- SpringBoot导入、导出Excel文件
  5. python360安全浏览器_python3.7--pycharm selenium自启360浏览器/360极速浏览器方法
  6. 3D建模师薪资怎么样? 游戏建模能达到月薪16k+,为什么?
  7. 数据库:精通MySQL
  8. MongoTemplate crud 封装
  9. 暨南大学计算机考研资料汇总
  10. 计算机网络测速创新,网速知识 - 专业网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测 - SpeedTest.cn...