C++中static用法

static用法分为两种情况,兼容于C语言的面向过程用法,和C++语言用于类的面向对象用法。

1.面向过程

     static变量存储在静态/全局区。因此生存期是整个程序,相当于全局变量。 所以默认会进行初始化。

 静态局部变量: 静态局部变量的作用域是该函数,引入static变量是在进入该函数时,变量进行一次初始化后,不会再进行初始化,不会覆盖之前修改过的数据。改变了变量的生存期。

 静态全局变量:  静态全局变量的作用域是该文件。 

        静态全局变量与全局变量的区别是,static将该变量作用域限制在了该文件。 全局变量的作用域是整个工作区。

        同理,也可以利用static将(全局)函数的作用域限制在该文件中,而不是整个工作区。函数默认是全局的。

2.面向对象

1)static成员变量:   属于类,所有对象共同所有,没有this指针。一个对象修改其值,其他对象再访问,为修改后的值。

                          需要在类外进行初始化,而且不用加static 修饰。所以,类外相当于是定义,而类内相当于是 声明该变量属于这个类。

                        static成员变量 可以认为是 在该类范围下的全局变量。所以类继承之后,父子类也是公用同一个变量。(全局)

2)static成员函数:同上,属于类,所有对象可使用。实现时不用加static.

                   相当于全局函数,所以 static成员不能访问类的private/public成员,因为不知道是哪个对象的,只能访问静态成员(相当于全局)。或者显式说明要访问哪个对象的成员。

                  可以被继承、覆盖,但不能为虚函数virtual.

路是一步一步走的
原文地址:https://www.cnblogs.com/Lalafengchui/p/4496428.html