问题貌似有点奇怪,指针都为NULL了怎么还可使用?但其实不是的,可以看以下代码:
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 void showSth(); 8 }; 9 int main() 10 { 11 A *a1 = NULL; 12 a1->showSth(); 13 system("pause"); 14 return 0; 15 } 16 17 void A::showSth() 18 { 19 if (this == NULL) 20 { 21 cout << "对象为NULL" << endl; 22 return; 23 } 24 cout << "执行了函数" << endl; 25 }
输出结果如下:
可以看出虽然指针为NULL,但是依然可以使用a1->showSth()函数,说明指向对象的指针为NULL时可以调用对象成员函数。这也说明了类的成员函数保存地址显然与实例化的对象保存地址不同,不然要依赖实例化的对象地址寻址函数无疑是水中捞月;类中的函数完全可以看作是一个一般的函数只是多了个隐藏的this指针参数,当用a1->showSth时就把指针a1赋给了函数的this指针,这里有判断this是否为NULL,是则返回,那么显然是不会出错的了。