virtual public 虛繼承類

2021-06-27 04:35:41 字數 1432 閱讀 7401

對於c++來說,類是必須要接觸的,現在有一種很莫名的感覺:就是當你接觸類後才能說自己開始逐步得到了c++的技能。下面我們談一談類的過載這個問題。

在類過載中我們一般使用以下的方式: 

class   grandfather 

}; class   father   :   public   base   {} 

class   child   :   public   middle   {} 

可以很清楚的看出過載過程是   grandfather-> father-> child. 

這樣的結構使用預設的過載方式就可以了. 

void   main() 

但是在某些時候,我們由基類分出若干子類,然後再由子類進行多重繼承, 

這個時候以上的方法就會出錯. 

比如: 

class   grandfather 

}; class   father   :   public   grandfather   {} 

class   mother   :   public   grandfather   {} 

class   child   :   public   father,mother   {} 

void   main() 

這是因為編譯時系統認為father和mother是兩個類體系 

來自不同的grandfather類(雖然兩個grandfather宣告一模一樣),所以在呼叫 

grandfather類的echo時無法確認指向那乙個. 

解決的方法是使用 "虛擬繼承 ". 

如下所示: 

class   grandfather

}; class   father    :   virtual   public   base   {} 

class   mother   :   virtual   public   base   {} 

class   child   :   public   father,mother   {} 

void   main() 

以下圖示更能描述預設繼承和虛擬繼承的區別. 

預設繼承: 

grandfather      grandfather       

|               | 

|               | 

father          mother 

|               | 

| child 

存在兩個類體系是出錯的原因. 

虛擬繼承: 

grandfather 

| |                 | 

father              mother 

|                 | 

| child 

使用虛擬繼承將類的體系整合起來. 

Chapter 28 命名空間 多重繼承和虛繼承

using宣告 eg using std list 推薦 using指示 eg using namespace std 防止命名空間汙染,可不連續 eg namespace namespacename 命名空間可巢狀 內部的成員會把外部的同名成員遮蔽 eg namespace a 訪問如下 a a ...

繼學生管理系統

最近我們學了io流,可以將資料匯入資料夾,也可以將資料夾資料匯出。這樣就可以對學生管理系統進行新增功能,比如 儲存所有學生資訊在資料夾或者從資料夾直接將個人學生資訊匯入學生管理系統 jfilechooser ch new jfilechooser 獲取選中資料夾 int i ch.showopend...

python Django之html模板繼承

django之html模板繼承簡單案例 構建母板,確定不變內容和可變內容 構建子板,對可變內容進行填充 結果 定義乙個基礎模板,該框架之後由子模板繼承。命名為base.html,這個頁面主要放公用部分的 各個子頁面都可以繼承這個頁面的樣式。首頁 編寫各個子模板。如下所示,作為基礎模板,必須放在第一行...