【静态存储:
关键字extern和static说明静态存储变量和函数标识符。全局说明的标识符默认为extern。
如果这两个关键字用于说明变量,程序在开始执行时就分配和初始化空间;如果用于说明函数,表示从程序执行开始就存在这个函数名。
尽管标识符被说明为静态时,程序一开始执行就存在,但不等于它们在整个程序中可用。用static说明的局部变量只能在定义该变量的函数体重使用。与自动变量不同的是,static在第一次使用时进行初始化(默认初始化值为0)。函数退出时系统保持其储存空间和数值。下次调用这个函数,static 变量还是上次退出函数时的值。】
#include
using namespace std;
class Counter
{
static int num;
public:
void setnum(int i)
{
num = i;
}
void shownum()
{
cout << num << ‘\t’;
}
};
int Counter::num = 0;//如果不在类外初始化静态数据成员,就会发生“LNK1120 1 个无法解析的外部命令”的错误。
int main()
{
Counter a;
a.shownum();
a.setnum(10);
a.shownum();
system(“pause”);
}
静态数据成员
静态数据成员要求在类中声明,在类外定义。尽管static数据成员从存储性质上是全局变量,但其作用域是类。static数据成员在类外可以用“类名::”作为限定词,或通过对象访问。
在类中,声明时,不会建立储存空间。在说明对象时建立内存,且储存空间的建立不依赖于对象(所有对象共享同一个静态数据成员,值取决于最后一个改变后的值。)
在类声明之外要有一个static数据成员的说明语句,让它在编译建立内存时建立内存并进行一次文件范围初始化。若不指定初始值,则系统自动初始化为0.