/*在乙個基類或派生類的成員函式中可以直接呼叫該類等級中的虛函式,例如:
class a
void act2()
virtual void act3()
virtual void act4()
void act5()
void act4()
void act5()
在上例情況下,this指向b,所以a::act2()呼叫b::act3().
a a;
a.act1();
可以使用dag來分析上例中對虛函式的呼叫過程,畫出最派生類b以及它的基類組成的dag,在dag中只列出
虛函式名,我們以類b為例
a a
繼承於a的b 刪除基類中被支配的名字如右圖
b b
右圖的dag決定了實際物件為b的物件情況下虛函式的執行過程。即如果
呼叫act3()或act4()的話,總呼叫b中定義的虛函式,而若呼叫act1(),則總是呼叫a中的虛函式
*//*
可以使用成員名限制來阻止基類的成員函式呼叫派生類中的虛函式,例如:
void a::act3()
void b::act3()
這時,對act4()的呼叫使用靜態聯編,即呼叫a中的act4()
*/
成員函式 虛函式 this指標
1 成員函式的實現機制和普通 全域性 函式沒有本質區別,對編譯器而言,經過名稱處理以後 在函式名前加上命名空間 類名 乙個成員函式就是普通函式了,在編譯後的 區域有確定的函式體和入口位址。最大的差別在於發生呼叫時,對於成員函式,編譯器會隱含語句push this,其中this指標指向物件的位址,這就...
手撕虛函式,虛函式呼叫虛函式
乙個類的記憶體分布,虛函式表指標,普通成員變數,sizeof a 為乙個虛表指標 32位是4位元組 普通成員變數 靜態什麼的都不是 虛函式本身也是函式,相當於乙個指標,虛函式表裡面含有虛函式,相當於乙個二級指標,虛函式表指標指向虛函式表,相當於乙個 指標,所有可以通過乙個 指標直接訪問某個虛函式。見...
虛函式以及c 成員函式的呼叫原理
class base11 virtual int get public int m i class subclass public base11 virtual int get public int m j int main base11 p 0 subclass q p q int fun nul...