第三十六節 C 菱形問題的解決 虛繼承

2021-08-18 20:30:44 字數 1228 閱讀 6914

菱形問題:三個派生類同時繼承乙個基類,又存在另乙個派生類同時繼承這三個派生類。這將導致建立三個基類物件(calss one),當我們通過three去呼叫one的函式實現時, 將出現錯誤,編譯器不知道呼叫哪個one的函式,這將是我們不願意發生的。

#include using namespace std;

class one

};/*建立兩個物件*/

class two_1 : public one

};/*建立兩個物件*/

class two_2 : public one

};/*建立兩個物件*/

class two_3 : public one

};/*多繼承*/

class three : public two_1, public two_2, public two_3

};int main()

output: 

one constructor      //例項化一次

two_1 constructor

one constructor    //例項化兩次

two_2 constructor

one constructor      //例項化三次

two_3 constructor

three constructor

可以用虛繼承解決上述問題。

#include using namespace std;

class one

};class two_1 : virtual public one

};class two_2 : virtual public one

};class two_3 : virtual public one

};/*多繼承*/

class three : public two_1, public two_2, public two_3

};int main()

output:

one constructor

two_1 constructor

two_2 constructor

two_3 constructor

three constructor

學習前端的第三十六天

嚴格模式的開啟方式 全域性嚴格 配合匿名函式 嚴格模式開啟之後的變更 宣告變數必須加關鍵字 var 不允許引數名重複 沒有明確隸屬物件的函式中的this 執行了 指向undefined arguments的內容不會被形參的改變而影響 arguments.callee被禁止使用 foreach map...

100題 第三十六 比賽淘汰問題(谷歌筆試)

一,題目 谷歌筆試 n支隊伍比賽,分別編號為0,1,2 n 1,已知它們之間的實力對比關係,儲存在乙個二維陣列w n n 中,w i j 的值代表編號為i,j的隊伍中更強的一支。所以w i j i 或者j,現在給出它們的出場順序,並儲存在陣列order n 中,比如order n 那麼第一輪比賽就是...

100題 第三十六 比賽淘汰問題(谷歌筆試)

一,題目 谷歌筆試 n支隊伍比賽,分別編號為0,1,2 n 1,已知它們之間的實力對比關係,儲存在乙個二維陣列w n n 中,w i j 的值代表編號為i,j的隊伍中更強的一支。所以w i j i 或者j,現在給出它們的出場順序,並儲存在陣列order n 中,比如order n 那麼第一輪比賽就是...