一、静态变量
与C语言一样,可以使用static说明自动变量。根据定义的位置不同,分为静态全局变量和静态局部变量。
全局变量是指在所有花括号之外声明的变量,其作用域范围是全局可见的,即在整个项目文件内都有效。使用static修饰的全局变量是静态全局变量,其作用域有所限制,仅在定义该变量的源文件内有效,项目中的其他源文件中不能使用它。 块内定义的变量是局部变量,从定义之处开始到本块结束处为止是局部变量的作用域。使用static修饰的局部变量是静态局部变量,即定义在块中的静态变量。静态局部变量具有局部作用域,但却具有全局生存期。 静态局部变量具有局部作用域,但却具有全局生存期。也就是说,静态局部变量在程序的整个运行期间都存在,它占据的空间一直到程序结束时才释放,但仅在定义它的块中有效,在块外并不能访问它。 静态变量均存储在全局数据区,静态局部变量只执行一次初始化。如果程序未显式给出初始值,则相当于初始化为0;如果显式给出初始值,则在该静态变量所在块第一次执行时完成初始化。
#include<iostream>
using namespace std;
//全局静态变量
static int glos_s=10;
//全局变量
int glos_a=10;
void f(){
int a=1; //局部变量a
static int fs=1; //静态局部变量fs,完成初始化。
a+=2;
fs+=2;
glos_s+=10;
glos_a+=10;
cout<<"在f中:局部变量a="<<a<<" 静态局部变量fs="<<fs<<" 全局变量glos_a="<<glos_a<< " 全局静态变量glos_s=" << glos_s <<endl;
}
int main(){
f(); //在f中:局部变量a=3 静态局部变量fs=3 全局变量glos_a=20 全局静态变量glos_s=20
f(); //在f中:局部变量a=3 静态局部变量fs=5 全局变量glos_a=30 全局静态变量glos_s=30
return 0;
}
二、类中的static
1、定义类的静态成员
类的静态成员有两种:静态成员变量和静态成员函数。在类体内定义类的成员时,
在前面添加static关键字后,该成员即成为静态成员。
2、类静态成员的使用
访问静态成员时,成员前面既可以用类名作前缀,也可以使用对象名或对象指针作前缀。这与访问类成员时仅能使用对象名或对象指针作前缀是不同的。访问类静态成员的一般格式如下:










