一.多繼承機制存在哪些問題,怎麼解決這些問題?
——歧義性:相同名稱的成員在記憶體中同時擁有多個拷貝,當通過派生類物件使用這些成員時,就會產生歧義性。作用域操作符雖然能解決歧義性問題,但並沒有解決多個拷貝的問題。
類d 的記憶體布局
使用虛擬機制注意事項:
1.若在虛基類中定義了帶引數的建構函式,而沒有定義預設建構函式,則必須在所有的直接或間接派生類中使用成員初始化列表呼叫虛基類的建構函式。
注意:
2.如果在同一繼承層次中同時包含虛基類和非虛基類,c++編譯器先呼叫虛基類的建構函式,再呼叫非虛基類的建構函式。
3.如果虛基類是由非虛基類派生而來,同樣遵循先呼叫基類建構函式,再呼叫派生類建構函式。
(實際應用中並不建議使用多重繼承,一則因為編譯器問題,二則多重繼承會帶來二義性問題。單繼承對描述事物已經提供了足夠強大的功能。並非要使用多繼承不可)
二.多繼承建構函式和析構函式的執行順序
析構函式的呼叫順序與建構函式相反
例如:
基類指標與派生類指標的指向關係
基類指標或引用可以在不進行顯示型別轉換的情況下指向派生類物件,但基類指標或引用只能用於呼叫基類方方法。派生類指標不可以指向基類物件。
39多繼承和虛基類
多繼承 horse類 bird類 pegasus類 飛馬 多繼承帶來的問題 二義性問題 繼承了兩個以上重名的函式,使得c 不知道該呼叫哪乙個函式 解決方式 寫上基類名稱 菱形繼承 horse和bird都有共同的基類animal 導致在建立pegasus類物件時會呼叫兩次animal類,產生兩次繼承。...
多繼承與虛基類
c 中的多繼承的二義性問題與虛基類的用法。在c 中類的繼承非常的廣泛,但當乙個類繼承了兩個或兩個以上的類的時候,如果在其繼承的多個基類中存在相同的函式成員,在呼叫該函式時,就會產生不知道呼叫哪個基類的函式,產生二義性。通常通過在呼叫時加上作用域操作符 指明呼叫的基類函式便可解決。這裡再講一種需要用到...
虛繼承和虛基類
虛繼承主要解決在多重繼承中的菱形繼承問題,也就是說 b和c類同時繼承了a類,然後d類繼承了b,c類,那麼d類的虛表就會有重複的函式指標。include using namespace std 虛基類 class person person person string name name name e...