C++ 类的静态成员

静态成员:静态数据成员、静态成员函数

静态数据成员:不破坏数据隐藏的前提下,解决不同对象之间数据共享的问题(比如对象计数器等)

静态成员函数:专门用于访问静态数据成员的成员函数。(其他的不行)


静态数据成员

实例属性:不同对象具有不同的属性值(在内存中各有一份拷贝);

类属性:对每个对象都是相同的,只有唯一拷贝。比如当前已创建对象的数量。(C++通过静态数据成员来实现类属性)


静态数据成员(static)除了可保存对象的数量,还可以作为一个标记,标记一些动作是否发生(比如文件的打开状态、打印机的使用状态);还可以用来存储对象链表的第一个结点或者最后一个结点的指针(地址)。这些属性都作为类属性而被不同对象重用,既不适合作普通成员,也不适合用全局变量,最适合用静态数据成员。


PS 静态数据成员不是某个对象的成员,而是同一个类所有对象(不管对象有多少个);静态数据成员的值可以更新,但只要对其更新一次,所有对象访问的都是更新后的值。(对象间相互通信)

静态数据成员是一种特殊的数据成员,存储类型上类似于一般的static静态变量,也具有全局性。静态数据成员属于整个类,为类的所有成员共享。无论对象有多少,静态数据成员只有一份(唯一性),并且,即使没有创建类的一个对象,静态数据成员也是存在的,从声明以后开始其生存期因此也不能在构造函数或其他成员函数中初始化,初始化必须在类体外进行。初始化在类体外进行,前面不加static。(想一想原因?是为了区别一般静态变量)

int Person::m_nCount = 0; // 对Person类的静态数据成员m_nCount初始化。


静态数据成员的使用比一般数据成员的更多的一点是:还可以用  类名::静态数据成员名  来访问。

私有和保护的静态数据成员只能在成员函数中被访问(初始化除外)。


静态成员函数

需求:在声明对象之前访问私有静态静态数据成员

方法:必须定义一个访问静态数据成员的静态成员函数(static开头)

特点:与静态数据成员类似,静态成员函数也是与类关联,而非对象。只能访问静态数据成员。


如果访问了非静态成员呢?Person::getCount()是否能确定访问的非静态成员是哪个对(Person1, Person2...)象的呢?

答案是否定的。解决办法:把对象作为静态成员函数的参数,在静态函数内通过对象访问非静态成员。


PS 静态成员函数没有this指针,因为它不关联任何一个对象。只需要通过类就可以调用唯一实例。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值