可以在繼承類中重寫父類的方法,關鍵字是virtual。
如下**所示,父類是super,繼承類是sub,在sub中,重寫了super的go()方法。
#include using namespace std;
class super
};class sub: public super
};int main()
程式的執行結果如下:
go() called on sub
go() called on super
可見,sub類物件呼叫了重寫的go() 方法。
虛函式的實現原理:
在包含虛函式的類中,會在記憶體中定義一張虛表,這個虛表包含了指向虛方法實現的指標。而每個類定義的物件都包含指向虛表的指標。在父類和繼承類定義的物件中,雖然是呼叫的相同名稱的函式,但兩個物件的這個函式指標指向虛表中不同的位址,所以物件能夠實現不同的方法。
對虛函式 虛表的認識
虛函式 實現多型的機制,多型就是用父型別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。讓父類的指標有 多種形態 一種泛型技術。關鍵字 virtual 虛函式表 此表中,主要是乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其內容真實反映實際的情況。在c 標準規格說明書中...
初步認識虛函式(二)
虛函式是如何做到的 如果你沒有看過 inside the c object model 這本書,但又急切想知道,那你就應該從這裡開始 虛函式是如何做到因物件的不同而呼叫其相應的函式的呢?現在我們就來剖析虛函式。我們先定義兩個類 class a virtual void fun2 class b pu...
對「認識」的認識
很早就想談談關於 認識 的認識。這是乙個巨集大深刻的哲學問題。只是覺得沒有完全思考清楚,還以為觀點有些偏頗,擔心自己沒能力系統論述,就遲遲沒有動筆。但想到談論的問題本身就是乙個偏頗的問題,而且,我始終覺得,問題儘管偏頗,但卻不無道理。所以,提筆寫下這篇文字。正像思想的本質是不安一樣,認識的本質是片面...