static:共享即通讯
一句话概括:局部作用域,全局生存期。
为什么要设计成为这样?
可以看一下这样的一段代码:
#include <iostream.h> #include <string.h> class CSmallOne { public: CSmallOne(int sma); int a; }; CSmallOne::CSmallOne(int sma) { cout <<"Smallone constructing with a value of" << sma <<endl; } void fn(int n) { static CSmallOne sm(n); //静态局部对象在静态数据区创建(只一次) sm.a += n; cout <<"In function fn with n= " << sm.a <<endl; } //CSmallOne sm(5); void main() { fn(10); //只看见一次调用构造函数 fn(10); //值可以累加(静态局部对象的特征) }
在这里,创建了一个静态局部对象,然后构造函数在这里只是调用了一次,当再次调用时,并没有调用构造函数,这里我们可以类比静态局部变量,这个是存储在静态数据区域的,然后构造函数一旦调用,对象就在静态区了,所以下次就不需要我们再次去调用了。
还有就是一个程序
#include <iostream.h> #include "A.h" A :: A() { cout << "in A" << endl; } class A { public: A(); }; #include <iostream.h> #include "A.h" A a; void main() { cout << "in main" << endl; }
在这里,我们要考虑的是出来的结果,为什么是A而不是main,在这里,A在全局区域,那么首先在加载时便会自行调用构造函数,于是A出来了,但是我们不妨想想,在这里,直接没有经过main函数就进行调用了,所以这是个问题。一般设计者是希望在main里面执行的。