C++中static用法
static用法分为两种情况,兼容于C语言的面向过程用法,和C++语言用于类的面向对象用法。
1.面向过程
static变量存储在静态/全局区。因此生存期是整个程序,相当于全局变量。 所以默认会进行初始化。
静态局部变量: 静态局部变量的作用域是该函数,引入static变量是在进入该函数时,变量进行一次初始化后,不会再进行初始化,不会覆盖之前修改过的数据。改变了变量的生存期。
静态全局变量: 静态全局变量的作用域是该文件。
静态全局变量与全局变量的区别是,static将该变量作用域限制在了该文件。 全局变量的作用域是整个工作区。
同理,也可以利用static将(全局)函数的作用域限制在该文件中,而不是整个工作区。函数默认是全局的。
2.面向对象
1)static成员变量: 属于类,所有对象共同所有,没有this指针。一个对象修改其值,其他对象再访问,为修改后的值。
需要在类外进行初始化,而且不用加static 修饰。所以,类外相当于是定义,而类内相当于是 声明该变量属于这个类。
static成员变量 可以认为是 在该类范围下的全局变量。所以类继承之后,父子类也是公用同一个变量。(全局)
2)static成员函数:同上,属于类,所有对象可使用。实现时不用加static.
相当于全局函数,所以 static成员不能访问类的private/public成员,因为不知道是哪个对象的,只能访问静态成员(相当于全局)。或者显式说明要访问哪个对象的成员。
可以被继承、覆盖,但不能为虚函数virtual.