前言 虛繼承 是面向對象編程中的一種技術,是指一個指定的基類,在繼承體繫結構中,將其成員數據實例共用給也從這個基類型直接或間接派生的其它類。 虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。 虛擬繼承在一般的應用中很少用到,所以也往往被忽視,這也主要是因為在C++中,多重繼承是不推 ...
前言
虛繼承 是面向對象編程中的一種技術,是指一個指定的基類,在繼承體繫結構中,將其成員數據實例共用給也從這個基類型直接或間接派生的其它類。
虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。
虛擬繼承在一般的應用中很少用到,所以也往往被忽視,這也主要是因為在C++中,多重繼承是不推薦的,也並不常用,而一旦離開了多重繼承,虛擬繼承就完全失去了存在的必要,因為這樣只會降低效率和占用更多的空間。
例如菱形繼承:
類 A 派生出類 B 和類 C,類 D 繼承自類 B 和類 C,這個時候類 A 中的成員變數和成員函數繼承到類 D 中變成了兩份,一份來自 A-->B-->D 這條路徑,另一份來自 A-->C-->D 這條路徑。
註意:
多繼承時很容易產生命名衝突,即使我們很小心地將所有類中的成員變數和成員函數都命名為不同的名字,命名衝突依然有可能發生
virtual修飾繼承方式:
1 //繼承的動作 虛繼承 2 //父類:虛基類 3 class 子類:virtual public 父類 4 { 5 6 };vbptr(虛基類指針) 其中v是virtual 虛 b是base 基類 prt指針 (vbptr指向虛基類表) vbtable(虛基類表 ) 保存了當前的虛指針相對於虛基類的首地址的偏移量 總結:之所以 產生 vbptr和vbtable 目的 保證 不管多少個繼承 虛基類的數據只有一份。