菱形繼承在c++繼承中是一種複雜的繼承關係,存在著二義性和資料冗餘的問題,而菱形虛擬繼承則是為了解決菱形繼承所存在的問題。為了**菱形虛擬繼承如何解決該問題,我先建立個乙個較為簡單的菱形繼承模型。下面分別是菱形繼承和菱形虛擬繼承的**實現:
//菱形繼承
#include#includeusing namespace std;
class aa
;class bb : public aa
;class cc : public aa
;class dd : public bb , public cc
;int main()
//菱形虛擬繼承
菱形虛擬繼承解決了菱形繼承的二義性和資料冗餘,從上圖的對比我們可以看出,_aa在菱形繼承中賦值時比較麻煩並且有兩個不同的值,也就是二義性,而在菱形虛擬繼承中可以定義一次,而派生類bb、cc訪問基類aa時,通過他們所存的位址--找到與_aa的 偏移量--呼叫_aa;雖然相對而言過程較為繁瑣,帶來了效能上的損耗,但是解決了 菱形繼承的二義性和資料冗餘。
菱形繼承 菱形虛擬繼承
菱形繼承 鑽石繼承 模型 拿如下 舉例 class person class student public person class teacher public person class graduate public student,public teacher void test 當派生類gr...
菱形繼承與虛擬繼承
c 中的繼承有單繼承和多繼承 本文主要探索的是多繼承中菱形繼承的二義性和資料冗餘及解決方案 菱形繼承的物件模型 從記憶體看菱形繼承物件模型 用乙個簡易 的 來說明二義性和資料冗餘這個問題 class aa class bb public aa class cc public aa class dd ...
複雜的菱形繼承及菱形虛擬繼承
乙個子類只有乙個直接父類時稱這個繼承關係為單繼承 乙個子類有兩個或兩個以上的直接父類時稱這個繼承方式為多繼承 菱形繼承是多繼承的一種特殊情況 菱形繼承的問題 1.冗餘 2.二義性 class person class student public person class teacher publi...