静态数据成员
多个同类的对象之间实现数据共享,但是不用全局变量,可以用静态数据结构成员。因为全局变量的值可以在各处随意的修改,很可能因为一处失误,导致整个程序失败。
#include <iostream>
using namespace std;
class Box
{
public:
Box(int, int);
int volume();
static int height; //height is defined as static data
int width;
int length;
};
Box::Box(int, int)
{
width = w;
length = len;
}
int Box::volume()
{
return(height * width * length);
}
int Box::height = 10; //initialize static member data
int main()
{
Box a(15,20),b(20,30);
cout << a.height << endl; //use object a
cout << b.height << endl; //use object b
cout << Box::height << endl; //use class Box
cout << a.volume() << endl; //function volume
}
输出结果:
10
10
10
3000
Program ended with exit code: 0
分析一下:
a. 静态数据成员可以初始化,但只能在类体外初始化。格式:
数据类型 类名::静态数据成员名 = 初值;
不必在初始化语句中加static。
注意:不能用参数初始化表对静态数据成员初始化。例如:
Box(int h, int w, int len):height(h){} //error,height is static data
b. a.height/b.height/Box::height,输出都是10,说明静态数据成员为所有同类对象所共有,不只是属于某一个对象。因为静态数据对象在内存中只占用一份空间,如果改变了它,那么各个对象的数据成员的值都改变了,可以节约空间和效率。它不随着对象的建立而分配空间,也不随着对象的撤销而释放。静态数据成员是在程序编译时被分配空间的,到程序结束时才释放。
c. 有了静态数据对象,对象之间的数据有了沟通的渠道,实现数据共享,因此可以不使用全局变量。静态数据成员的作用域是该类,而不是全局。