C++语言程序设计

二、公有的静态数据成员
数据成员也可以是公有的，不过我们很少定义公有的数据成员，因为它破坏了数据隐藏的原则。如果Directory类的成员path[]定义为公有的，则该成员可在类外的任一地方访问：
void main()
{
strcpy(Directory::path, "/usr/local/pub"); //修改path的值
…
}
path仍然必须先初始化:
char Directory::path[200];
为什么需要静态数据成员？
类的静态数据成员拥有一块单独的存储区，而不管我们创建了多少个该类的对象。也就是说，静态数据成员被类的所有对象共享，它是属于类，而不是属于对象的。所有对象的静态数据成员都共享一块静态存储空间，可以节省内存，也为对象之间提供了一种互相通信的方法。静态数据成员的作用域在类内，也有public（公有）、private（私有）或者protected（保护）三种访问权限。

静态数据成员的存储空间分配
对于非静态数据成员而言，有多少个对象，就有多少个不同的内存单元，它们分布在各个对象的存储空间中。静态数据成员不同于非静态数据成员，不管有多少个对象，它们都共享相同的内存单元。所以，静态数据成员不应该属于任何一个对象，说它属于类更确切。
我们用一个例子来说明这种存储空间的关系， 对于类：
class C
{
static int si;
static int sc;
int i;
char c;
//……
};
如果我们创建了类C的三个对象c1、c2和c3，那么它们的数据成员的存储关系如图10-2所示：

| 图10-2