在前面的认知里,空指针是不能访问有用的数据和函数的,因为空指针并没有指向什么有意义的数据存储空间。但是在C++类对象中就不见得是这样了,C++类对象中,空指针可以访问成员函数。
我们看下面的代码及其运行情况:
#include<iostream>
using namespace std;
class Person
{
public:
//定义Person类的一个成员函数
void ShowClassFunc()
{
cout << "这是一个 person类的成员函数\n";
}
};
void test()
{
Person p; //1.根据Person类创建一个对象p
Person* ptr = NULL; //2.创建一个Person类型的空指针
p.ShowClassFunc();//3.通过具体的对象p访问类成员函数
ptr->ShowClassFunc();//4.通过空指针访问类成员函数
}
int main()
{
//运行测试函数
test();
return 0;
}
运行结果:
这是一个 person类的成员函数
这是一个 person类的成员函数
我们可以发现,空指针ptr居然可以访问类成员函数ShowClassFunc(),这是为什么呢?为什么空指针能调用成员函数?
要搞清楚这个问题,我们首先复习我前一篇