天天看點

c++ 虛基類

參考:​​​​

​​https://blog.51cto.com/blogger/publish?old=1/h3f0123c6-341133757571bc8357579​​

​​http://c.biancheng.net/view/2280.html​​

虛基類不是自己聲明的,而是由派生類聲明的,應對于菱形繼承的情況。這樣一個類既可以作為虛基類也可以作為普通基類。

c++ 虛基類

此時類D有兩條線間接繼承類A。A<···B<···D,A<···C<···D

如果是正常繼承,類D對象會有兩份類A的的對象和函數,分貝來自B和C。

但是,通常情況下,類D對象隻需要一塊類A記憶體。

此時需要使用虛基類。

c++ 虛基類

這樣在派生類D内隻有一份A的拷貝,且在D内初始化虛基類A。不用擔心在D中的A被初始化三次,編譯器會確定。

在類D的繼承關系出,我們可以下圖這樣寫。此時D對象中也隻有一份A的函數和變量,但是如果有類繼承自D,又容易産生菱形繼承的二義性問題。

c++ 虛基類

繼續閱讀