C++语言程序设计

下面是静态数据成员定义的实例：

| 例10-18

class Test
{
public:
static int public_int;
private:
static int private_int;
};

void main()
{
Test::public_int = 145; // 正确
Test::private_int = 12; // 错误，不能访问私有的数据成员
}

从上例我们可以看到：静态数据成员的访问方式是：
类名::静态数据成员名
但是,不能直接访问私有的数据成员。其实，上面的程序段只是为了介绍如何访问静态数据成员，不能通过编译器的的编译和连接。
一、私有的静态数据成员
为了说明私有的静态数据成员的使用，考虑下面的程序段：
class Directory
{
public:
...
private:
// 数据成员
static char path[];
};
数据成员path[]是一个私有的静态变量，在程序执行过程中，仅一个Directory::path[]存在，即使有多个Directory类的对象。静态的数据成员能够被类的成员函数访问，但不能在构造函数中初始化。这是因为静态数据成员在构造函数被调用之前就已经存在了。静态数据成员可以在定义时初始化，且必须在类和所有的成员函数之外，与全局变量初始化的方法一样。例如，类Directory的数据成员的定义与初始化方法如下：
// 静态数据成员的定义与初始化
char Directory::path [200] = "/usr/local";
// 无参的构造函数
Directory::Directory()
{
...
}
在类中的静态数据成员的定义，只是说明该类有这么一个数据成员，并没有为该数据成员分配内存。就象非静态数据成员是在创建对象时分配内存一样，静态数据成员是在初始化时分配内存的。所以，在定义静态的数组成员时，可以省略它的尺寸（数组元素的个数），但在初始化时，必须确定数组的尺寸。