C++面試題-多繼承下的多態機制

C++面試題目

C++中多繼承下的多態機制。

解決方案

一個子類有兩個或以上直接父類時稱這個繼承關係為多繼承,這種繼承使得一個子類可以繼承多個父類的特性。

對於如下有多重繼承的實例:

多重繼承(無虛函數覆蓋的情況)

C++面試題-多繼承下的多態機制

對應的虛函數模型示意圖如下:

C++面試題-多繼承下的多態機制

1) 每個父類都有自己的虛表。

2) 子類的成員函數被放到了第一個父類(按照父類聲明的順序)的表中。

多重繼承(有虛函數覆蓋的情況)

如下圖所示,子類中覆蓋了父類的f()函數。

C++面試題-多繼承下的多態機制

對應的虛函數模型示意圖如下:

C++面試題-多繼承下的多態機制

三個父類虛函數表中的f()的位置被替換成了子類的函數指針,這樣就可以保證調用到f()函數。

內存分配實例

如下代碼,class D繼承自class A、class B、class C。

C++面試題-多繼承下的多態機制

C++面試題-多繼承下的多態機制

在VC6.0下的內存結構:

C++面試題-多繼承下的多態機制


分享到:


相關文章: