是多重繼承,而不是多態繼承。
子類繼承了父類的成員變量,即子類的數據存儲區為父類變量 + 子類擴展變量,至於成員函數調用,要理解其調用本質,編譯器隻是把一個類指針暗地裏傳給了代碼區的成員函數。至於 override 是指 virtual 函數,此類函數通過一個虛擬函數表用函數指針調用(即匯編裏的間接調用), 而此表指針則被放在類的開始位置。繼承時,子類的數據存儲區的父類部分的 virtual table 指針被換為子類的函數表指針。
多重繼承。假如, C 繼承了 A 和 B, 然後
C c;
A* a = &c; //向上強製為 A
B* b = &c; //向上強製為 B. 問題是B的數據區和vtable,如何能自動找到。C++ 用了很複雜的方式完成了多重繼承。
回複:有哪位高手給詳細講解一下C++裏多態繼承的問題(或曰菱形問題)
所有跟帖:
• 覺得C++的發明者們很豬頭 -難割難舍中國心- ♂ (719 bytes) () 03/17/2011 postreply 00:11:46
• 哈哈! 如實轉告了。 -π- ♂ (494 bytes) () 03/17/2011 postreply 07:32:35