转载:什么时候可以不用实例化对象就可以调用类中成员函数
http://blog.csdn.net/dwb1015/article/details/32933349
对于一个类A,对于这个定义((A*)0)或者 A *p = NULL 都可以调用类中的那些成员函数。
第一种情况:非静态成员函数没有使用类的非静态数据成员,调用的其他非静态成员函数也不能使用类的非静态数据成员
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- void fun1()
- {
- cout<<"fun1"<<endl;
- fun2(); //如果fun2函数内部调用了数据成员a,则会调用失败
- }
- void fun2()
- {
- cout<<"fun2"<<endl;
- //a = 1;
- }
- private:
- int a;
- int b;
- };
- int main()
- {
- A *p = NULL;
- p->fun1();
- }
第二种情况:非静态成员调用类的静态数据成员。
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- void fun1()
- {
- cout<<"fun1"<<endl;
- a = 3;
- cout<<"a = "<<a<<endl;
- }
- private:
- static int a;
- int b;
- };
- int A::a = 0;
- int main()
- {
- A *p = NULL;
- p->fun1();
- }
第三种情况:类的静态成员函数
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- static void fun1()
- {
- cout<<"fun1"<<endl;
- a = 3;
- cout<<"a = "<<a<<endl;
- }
- private:
- static int a;
- int b;
- };
- int A::a = 0;
- int main()
- {
- A *p = NULL;
- p->fun1();
- }