1、类的静态数据成员是 静态分配存储空间 的,而其它成员是动态分配存储空间的(全局变量除外)。当类中没有定义静态数据成员时,在程序执行期间遇到说明类的对象时,才为对象的所有成员依次分配存储空间,这种存储空间的分配是动态的;而当类中定义了静态数据成员时,在编译时,就要为类的静态数据成员分配存储空间。
2、必须在文件作用域中,对静态数据成员作一次且只能作一次定义性说明。因为静态数据成员在定义性说明时已分配了存储空间,所以通过静态数据成员名前加上类名和作用域运算符,可直接引用静态数据成员。在C++中,静态变量缺省的初值为0,所以静态数据成员总有唯一的初值。当然,在对静态数据成员作定义性的说明时,也可以指定一个初值。
#include <iostream>
using namespace std;
class CTest {
public:
CTest(int a) {
x = a;
y = y + x;
}
static void disp(CTest obj) {
cout << "x=" << obj.x << ",,,y=" << obj.y << endl;
}
private:
int x;
static int y;//静态数据
};
int CTest::y = 10;
int main()
{
// x=5,y=15
// x=10,y=25
CTest obj1(5), obj2(10);
CTest::disp(obj2);
CTest::disp(obj1);
CTest* pobj;
pobj = &obj1;
pobj->disp(obj1);
}