虛擬繼承解決二義性及數據冗餘的原理

虛擬繼承的原理
虛擬繼承解決數據冗餘和二義性的奧祕就在於,它在繼承以後並不會創造出兩個基類成員給派生類各自繼承,而是在派生類中記錄兩個偏移量,大小爲從派生類中繼承的基類成員的地址到真正的基類成員地址,而這個真正的成員,被放在最後一次繼承的派生類(D類)的末尾。
虛擬繼承解決二義性及數據冗餘的原理
如圖所示,在不使用虛擬繼承的前提下,各個類定義定義變量後咱們能夠看看他們各自所處的地址以下:
虛擬繼承解決二義性及數據冗餘的原理
能夠看出,A,B類繼承的m_n處於不一樣的地址,是兩個成員。而使用虛擬繼承後他們所處地址的內容變成了以下:
虛擬繼承解決二義性及數據冗餘的原理
能夠看出,本來爲值‘3’和‘4’的地方變成了兩個偏移量,而咱們調取這兩個偏移量以後能夠看到以下:
e8 d2 f5 00 :12(H)
虛擬繼承解決二義性及數據冗餘的原理
ac cb f5 00 :20(H)
虛擬繼承解決二義性及數據冗餘的原理
而咱們發現,從起始位置到下面04的位置(D類中的末尾),偏移字節正好是12和20。
其實,這裏是經過B和C的兩個指針,指向一張表,這兩個指針叫作虛基表指針,這兩個表叫虛基表,虛基表中存的偏移量,經過偏移量能夠找到下面的A。
Ps:並非全部派生類共用一分虛基表,每一個派生類都有本身的表;ide

相關文章
相關標籤/搜索