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