为什么要有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。
注意:
类的静态成员函数不能引用非静态成员。
类的非静态成员函数能引用静态成员。
这是为啥呢?其实从初始化的角度来看,类的静态成员在类初始化时就已经初始化了,而非静态成员要等到类的实例化时才加载,也就是说静态成员初始化时非静态成员还没出生,怎么能引用呢?
反过来,初始化非静态成员的时候,静态成员早就在全局数据区了,所以可以引用。
C++ static
最新推荐文章于 2022-12-30 01:51:11 发布