C++ static

为什么要有static
考虑这种情况:
你想定义一个类A,类A里面要一个成员变量count,来计算当前生成了多少个类A的对象,其实不必每个类A对象都拥有一个自己的count,因为大家是同类,count是相同的,而且当创建一个新类A对象时候,要找到每个已有的类A对象,把他们的count都++,这也太麻烦了吧,而且不实际。
那一般会把count定义为全局变量,这样只需要对这一个count操作就好了。
但是这样做违反了面向对象特性之一:封装。因为全局变量count可以被任何人操作,而我们只想让类A操作count。提出static关键字的原因之一,就是解决这类问题。
什么是static
static关键字修饰的变量,称为静态变量,将被分配到内存的全局存储区,一直到程序结束才释放。
静态变量又分为全局静态变量和局部静态变量。
静态变量的特点如下:
(1)他们都分配在全局数据区。
(2)全局静态变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。
(3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。
(4)局部静态变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为 0;其作用域为局部作用域。
怎么用static
现在来说说怎么解决上面提出的问题:
将count定义为类A的static 成员变量,让所有类A的对象共用一个count。
注意:
类的静态成员函数不能引用非静态成员。
类的非静态成员函数能引用静态成员。
这是为啥呢?其实从初始化的角度来看,类的静态成员在类初始化时就已经初始化了,而非静态成员要等到类的实例化时才加载,也就是说静态成员初始化时非静态成员还没出生,怎么能引用呢?
反过来,初始化非静态成员的时候,静态成员早就在全局数据区了,所以可以引用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值