C++语言程序设计

静态成员函数
我们也可以创建一个静态的成员函数。同静态数据成员类似，它也是属于类，而不是属于某一个对象的。
静态成员函数不能访问非静态的数据成员，它只能访问静态数据成员，也只能调用其它的静态成员函数。原因是：当前对象的地址（this）是被隐含地传递到被调用的函数的。但一个静态成员函数没有this指针，所以它无法访问非静态的成员函数。
下面是一个应用静态数据成员和静态成员函数的例子：

| 例10-23

class X
{
int i;
static int j;
public:
X(int I = 0):i(I)
{
//非静态成员函数可以访问
//静态成员变量和成员函数
j = i;
}
int val()const
{
return i;
}
static int incr()
{
//i++;　　　//Error: 静态成员函数
//不能访问非静态成员变量
return ++j; //OK
}
static int f()
{
//val(); 　　　//Error: 静态成员函数
//不能访问非静态成员函数
return incr(); //OK
}
};

int X::j = 0;
void main()
{
X x;
X* pX = &x;
x.f();
pX -> f();
X::f();
}

由于静态成员函数是属于类的，所以，静态成员函数的调用方法为：
类名::静态成员函数名();
但也允许用对象或指向对象的指针调用。例如，在main()中，静态成员函数f分别被对象x和指向x对象的指针pX调用。