空指標也能呼叫成員函式?

2021-07-12 04:58:46 字數 749 閱讀 5115

class cal

};int main()

#endif

q;該程式輸出的結果什麼?

博主毫不猶豫的選擇了「執行時崩潰」這個選項

然而。。。。真正的答案卻是這個指標可以正確的呼叫show()函式。。what?!why?!這不科學

懷著對科學嚴謹的態度(我要吐了)

我們現在再看一段**!

class cal

void display()

private:

int a;

};int main()

#endif

和上面的那段**很像吧,但是呢,這段**在執行的時候是會崩潰的,為什麼呢!?

仔細的你發現了沒,上面第一段**裡,指標呼叫的函式沒有用到this指標,而這一段裡用到了,所以關鍵就在於你是否用到了this指標。

這是因為,我們在編寫乙個類的時候,它的所有的物件共用了成員函式,所以在編譯期間我們就已經確定了成員函式的位址,而類又依靠this指標來區分各個不同的物件以便於找到正確的資料。對於第乙個例子,它的this指標就等於null而show()是乙個靜態型別的成員函式,在呼叫時不會傳this指標給它,所以我們可以順利的呼叫它,但是第二個例子中我們用到了類的資料a在呼叫時被編譯器解釋為this->a ,但是你得this是null啊,你指什麼啊!?

所以,你明白了嗎。。。

本文出自 「zimomo」 部落格,請務必保留此出處

空指標的成員函式呼叫

自 http hi.baidu.com sangwf blog item 0be10af482d0c46edcc47464.html 我一直認為技術是沒有止境的,不管你怎麼去學,總有你沒有掌握的地方。但是,人,是不能停下腳步的。今天在檢查乙個mfc程式,看到getsafehwnd函式,於是讓我想明白...

空指標的成員函式呼叫

指標為null了,函式還能呼叫嗎?於是寫了乙個簡單的程式來做測試,如下 class a 測試發現,程式能夠正常執行。把p賦乙個非空值如p a 123 同樣如此。於是想搞明白這到底是怎麼一回事。雖然以前明白類成員函式中其實是隱藏了乙個this指標,但不同的例項在呼叫函式時是如何工作的,還不是很清楚。通...

空指標可以呼叫成員函式?

有下面乙個簡單類 class a 用乙個空指標呼叫上面的fun函式 a pa null pa fun 講道理,空指標應當是 不可用 的,自然也不能呼叫其成員函式了,但是結果卻出乎意料地正確執行了 為什麼?其實,關鍵在於每個成員函式的this指標。其實,c 類的成員函式與傳統c的函式並沒有什麼不同,只...