1classa 2
3classb 4
5class
c: public
a, publicb 6
7b*b
=newc;8
9b->
foo();
//virtual function
在為line 9實現多型的時候,b指向的不是c物件的開頭,而是其subobject b的開頭。
因此在呼叫foo時,作為引數的this指標需要被調整,以指向真正的c物件的開始。
在《inside the c++ object model》一書中,lippman提到了兩種方案,一種是在虛函式表中不光存放真正呼叫函式的位址,還存上需要對this指標進行調整的偏移,在呼叫時,直接給this指標加上偏移;另一種方法就是使用thunk,在thunk中調整this指標,再對函式進行呼叫。
我不能明白為什麼這個偏移不能在編譯期決定這個問題上。這個問題應該非常常識,但是我好像鑽牛角尖了。。。想了想,想通了。
c++ tips: adjustor thunk: what is it, why and how it works
thunk (programming)
C 多型之繼承7 多重繼承
之前我們列舉的所有例子都是單一的繼承 每乙個繼承類有且只有乙個父類。然而,c 提供了多重繼承的功能,多重繼承使得派生類能從多個父類繼承成員。下面是乙個多重繼承的列子 多重繼承的問題多重繼承看似是對單一繼承的擴充套件,實際上多重繼承存在很多問題,這些問題增加了程式的複雜性以及維護難。讓我們看看下面這個...
多重繼承 Python的封裝繼承多型和多重繼承
相信你一定知道繼承,多型和封裝。封裝通常是為了提供統一介面而將具體實現過程或者屬性以方法或者類的方式對外呈現 繼承就是子類繼承父類從而擁有父類的方法和屬性 多型是繼承了同乙個父類的不同子類分別重寫了父類的某個方法而使得這個方法在不同的子類中有不同的實現。多重繼承即子類繼承多個父類,擁有多個父類的方法...
c 繼承 多重繼承 多型性 虛函式
從繼承的角度來看,y 所繼承到的成員 x 的資料成員 的訪問屬性 x作為y 的成員,屬性是由繼承方式決定的,訪問屬性可由普通成員屬性推理理解 多重繼承的訪問屬性 可按照 上邊 繼承加遞迴的思想理解 多型性virtual this 編譯器幫助我們簡化操作,通過虛函式 方便多多 總結c 讓編譯器多做點工...