对于一个类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();
}