1.菱形繼承
菱形繼承概念圖: 
菱形繼承對(duì)象模型:
參照菱形繼承對(duì)象模型,不難發(fā)現(xiàn)若調(diào)用DD類(lèi)時(shí),里面包含兩個(gè)相同的AA類(lèi)的所有成員,在調(diào)用過(guò)程中會(huì)出現(xiàn)二義性和數(shù)據(jù)冗余的問(wèn)題,為了解決上述問(wèn)題,我們提出了虛繼承。接下來(lái)通過(guò)簡(jiǎn)單實(shí)例代碼講解虛函數(shù)及底層實(shí)現(xiàn)。 代碼樣例:
通過(guò)代碼樣例,利用內(nèi)存調(diào)試窗口我們可以觀察到內(nèi)存地址分配以及逐步賦值操作順序和地址。
圖中的20和12是相對(duì)于AA地址的偏移地址。通過(guò)虛繼承(+viryual關(guān)鍵字),DD中重復(fù)繼承的類(lèi)AA歸于一個(gè),解決了菱形繼承中二義性的問(wèn)題。 通過(guò)應(yīng)用偏移地址,在賦值操作前,將兩個(gè)相同且重復(fù)AA類(lèi)地址分別賦予不同的偏移地址,保證其正確的存儲(chǔ)。AA被分配到最底層的地址,通過(guò)內(nèi)存一步步調(diào)試,觀察賦值過(guò)程。
上圖經(jīng)過(guò)內(nèi)存調(diào)試,通過(guò)地址可以看出其偏移地址。可以看出中間相差8個(gè)字節(jié),通過(guò)多占用8個(gè)字節(jié)的空間,以空間換時(shí)間,解決數(shù)據(jù)冗余的問(wèn)題。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注