c++中指向物件的指標為NULL時可以呼叫物件成員函式嗎
阿新 • • 發佈:2018-12-16
問題貌似有點奇怪,指標都為NULL了怎麼還可使用?但其實不是的,可以看以下程式碼:
#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,是則返回,那麼顯然是不會出錯的了。