L
lqy
Unregistered / Unconfirmed
GUEST, unregistred user!
前面都差不多
我對“滞后联编”這個詞有點反感,覺的它有點導觀眾,把問題神秘化
所謂的“滞后联编”應該是說類在內存中初始化時確定虛方法的地址.
“滞后联编”發生在類在內存中初始化時,而不是在對象創建時,再次強調對象只是
一個類指針加一堆數據,和方法無關
假如 Tobject TA
有虚方法 A B
Ta 在內存中初始化時,會建立VMT
它可能會是這樣的
a方法地址,b方法地址
TB 繼承於TA, 在TB類初始化時,如果你有Overload A,b方法
則TB會單獨建立 A,B方法的代碼
它的VMT是這樣的
a方法新地址,b方法新地址
類在調用方法時是按方法在 vmt中偏移量來進行尋址的,和方法名沒甚麼關係
這就是繼承的實現原理
在回來說多態就簡單了,甚麼 父類=子類 那麼難理解
其實就實就是強行地把 父類 的 ptrVMT - 76 轉向為子類的 ptrVMT - 76
就是那麼簡單
我對“滞后联编”這個詞有點反感,覺的它有點導觀眾,把問題神秘化
所謂的“滞后联编”應該是說類在內存中初始化時確定虛方法的地址.
“滞后联编”發生在類在內存中初始化時,而不是在對象創建時,再次強調對象只是
一個類指針加一堆數據,和方法無關
假如 Tobject TA
有虚方法 A B
Ta 在內存中初始化時,會建立VMT
它可能會是這樣的
a方法地址,b方法地址
TB 繼承於TA, 在TB類初始化時,如果你有Overload A,b方法
則TB會單獨建立 A,B方法的代碼
它的VMT是這樣的
a方法新地址,b方法新地址
類在調用方法時是按方法在 vmt中偏移量來進行尋址的,和方法名沒甚麼關係
這就是繼承的實現原理
在回來說多態就簡單了,甚麼 父類=子類 那麼難理解
其實就實就是強行地把 父類 的 ptrVMT - 76 轉向為子類的 ptrVMT - 76
就是那麼簡單