問題貌似有點奇怪,指針都為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,是則返回,那么顯然是不會出錯的了。