首先要知道
  1:静态函数和非静态的区别
  2:静态成员和非静态成员的区别
  如下
  1: 静态成员和非静态成员的区别。
  静态成员不是某对象私有的(所有对象共有,修改一个对象的静态成员,其他所有的都修改,同时这也是RTTI的原理),他要求在声明时初始化(不能在类作用域内初始化),并且, 这个成员也不计算在calss的大小里面(你可以做实验。或者参考Inside The C++ Object Model)
  也是,即使对象不存在,这个静态成员也存在了,而其他的非静态成员只有在对象存在的时候,非静态成员才存在(这里的存在是指有内存被分配)
  2: 静态函数和非静态函数
  静态成员函数,你可以理解成全局函数(这是错误的,但是在浅层次来说,是一样的),他属于类,但是不属于某一对象的私有函数,
  也是说,如下代码是错误的
  例如
ClassTest
{
。。。。。。。。
public:
staticvoidDisplay(){。。。。。}
};
Testt;
t.Display();//错误,Display是静态函数,不是某一对象的私有成员,不能这么调
  同样, 既然上边讲他不属于类,类似全局函数,那么函数的实现里面如果用到变量,这个变量必须已经存在(内存分配)也是说,他的实现内不内直接调用非静态成员(因为对象不存在时候,非静态成员也不存在),
  后, 下边例子可能比较说明问题。
int g_i = 0;
class Test
{
private:
int  m_nTestA;
static int m_nstaticB;
public:
Test(){ m_nTestA = 0;}
~Test(){}
static void DisPlay(Test *pTest)
{
//cout<<m_nTestA<<endl; 错误调用,见编译器错误输出。
cout<<g_i <<endl;
cout<<pTest->m_nTestA<<endl;
}
}
int Test ::m_nstaticB = 0;
void main()
{
Test T;
//T.Display(...) 错误 见编译器输出
Display (&T);
}