第53課 被遺棄的多重繼承(上)

2021-10-03 09:30:20 字數 1950 閱讀 8514

本文內容來自於對狄泰學院 唐佐林老師 c++深度解析 課程的學習總結

c++ 中的多重繼承

c++ 支援編寫 多重繼承 的**

乙個子類可以擁有多個父類

子類擁有所有父類 的成員變數

子類繼承 所有父類的 成員變數

子類物件可以當作任意父類物件 使用

多重繼承的語法規則:

多重繼承的本質與單繼承相同!

多重繼承問題一

程式設計實驗

#include

#include

using

namespace std;

class

basea

intgeta()

};class

baseb

intgetb()

};class

derived

:public basea,

public baseb

intgetc()

void

print()

};intmain()

else

cout <<

"pa = "

<< pa << endl;

cout <<

"pb = "

<< pb << endl;

cout <<

"paa = "

<< paa << endl;

cout <<

"pbb = "

<< pbb << endl;

return0;

}

執行結果

實驗結果,同樣指向派生類物件d的不同父類指標的位址卻不一樣

多重繼承的問題二

實驗**

#include

#include

using

namespace std;

class

people

void

print()

};class

teacher

:virtual

public people};

class

student

:virtual

public people};

class

doctor

:public teacher,

public student};

intmain()

執行結果

虛繼承 能夠 解決資料冗餘 問題

中間層父類不再關心頂層父類的初始化

最終子類必須直接呼叫頂層父類的建構函式

c++ 支援多重繼承 的程式設計方式

多重繼承 容易帶來問題

53 被遺棄的多重繼承

c 支援編寫多重繼承的 乙個子類可以擁有多個父類,子類擁有所有父類的成員變數,子類繼承所有父類的成員函式,子類物件可以當作任意父類物件使用。多重繼承的本質與單繼承相同。include include using namespace std class basea int geta class bas...

C 53 被遺棄的多重繼承 (上)

問題 c 中是否允許乙個類繼承自多個父類?class derived public base a,public base b,public base c include using namespace std class basea int geta class baseb int getb cla...

類的繼承 被遺棄的多重繼承

本文參照於狄泰軟體學院,唐佐林老師的 c 深度剖析教程 關聯知識 virtual虛函式,繼承 問題 c 中是否允許乙個類繼承自多個父類?如果可以,那麼會出現什麼問題呢?如果不可以,為什麼?我們在單繼承的語法基礎上,再繼承兩個父類,試試編譯是否能通過。class derived public base...