首先要知道 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); }