虛繼承抽象類會咋樣
首先先說,我不是那種懶人,我已經(jīng)用VS試驗過了,不過剛突發(fā)奇想覺得很有意思,所以想跟大家分享下。
菱形虛繼承(遠征篇-繼承-6.1),最底層實例化時只有一個最高層的副本,比如B和C繼承A,D繼承B和C,那么實例化D的時候只會實例化一個A的對象。
這節(jié)課有一個知識點叫抽象類(含有純虛函數(shù)的類),這就很有意思了,抽象類無法實例化,必須定義繼承下來的虛函數(shù)才能實例化,那么假設(shè)B和C對同一個A中的虛函數(shù)fun有不同的實現(xiàn),那么D同時繼承B和C,D又只含有一個A的副本,那么D中的fun到底是B中定義,還是C中定義的呢?
答案是無法編譯(虛擬函數(shù) 函數(shù) "A::fun" 的重寫不明確),只有B和C中有且只有一個fun函數(shù)的定義,才可以編譯通過,順利運行。
2020-01-14
這個是可以運行的啊
2020-01-10
能把代碼貼出來嗎