虛擬繼承C++

來源:互聯網
上載者:User

標籤:路徑   同義字   對象   類的建構函式   一個   副本   調用   產生   自己   

C++中虛擬繼承的概念

為瞭解決從不同途徑繼承來的同名的資料成員在記憶體中有不同的拷貝造成資料不一致問題,將共同基類設定為虛基類。這時從不同的路徑繼承過來的同名資料成員在記憶體中就只有一個拷貝,同一個函數名也只有一個映射。這樣不僅就解決了二義性問題,也節省了記憶體,避免了資料不一致的問題。
class 衍生類別名:virtual 繼承方式 基類名
virtual是關鍵字,聲明該基類為衍生類別的虛基類。
在多繼承情況下,虛基類關鍵字的作用範圍和繼承方式關鍵字相同,只對緊跟其後的基類起作用。
聲明了虛基類之後,虛基類在進一步派生過程中始終和衍生類別一起,維護同一個基類子物件的拷貝。

 

C++虛擬繼承

◇概念:

C++使用虛擬繼承(Virtual Inheritance),解決從不同途徑繼承來的同名的資料成員在記憶體中有不同的拷貝造成資料不一致問題,將共同基類設定為虛基類。這時從不同的路徑繼承過來的同名資料成員在記憶體中就只有一個拷貝,同一個函數名也只有一個映射。

 

◇解決問題:

解決了二義性問題,也節省了記憶體,避免了資料不一致的問題。
 
◇同義字: 
虛基類(把一個動詞當成一個名詞而已)
當在多條繼承路徑上有一個公用的基類,在這些路徑中的某幾條匯合處,這個公用的基類就會產生多個執行個體(或多個副本),若只想儲存這個基類的一個執行個體,可以將這個公用基類說明為虛基類。

 

◇文法:

class 衍生類別: virtual 基類1,virtual 基類2,...,virtual 基類n

{

...//衍生類別成員聲明

};

 

◇執行順序

首先執行虛基類的建構函式,多個虛基類的建構函式按照被繼承的順序構造;

執行基類的建構函式,多個基類的建構函式按照被繼承的順序構造;

執行成員對象的建構函式,多個成員對象的建構函式按照申明的順序構造;

執行衍生類別自己的建構函式;

析構以與構造相反的順序執行;

mark

從虛基類直接或間接派生的衍生類別中的建構函式的成員初始化列表中都要列出對虛基類建構函式的調用。但只有用於建立對象的最衍生類別的建構函式調用虛基類的建構函式,而該衍生類別的所有基類中列出的對虛基類的建構函式的調用在執行中被忽略,從而保證對虛基類子物件只初始化一次。

在一個成員初始化列表中同時出現對虛基類和非虛基類建構函式的調用時,虛基類的建構函式先於非虛基類的建構函式執行。

 

◇因果:

多重繼承->二義性->虛擬繼承解決

虛擬繼承C++

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.