53 被遺棄的多重繼承

2021-08-19 20:38:09 字數 1617 閱讀 6235

c++支援編寫多重繼承的**,乙個子類可以擁有多個父類,子類擁有所有父類的成員變數,子類繼承所有父類的成員函式,子類物件可以當作任意父類物件使用。

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

#include

#include

using namespace std;

class basea

int geta()

};class baseb

int getb()

};class derived : public basea, public baseb

int getc()

void print()

};int main()

else

cout << "pa = " << pa << endl;

cout << "pb = " << pb << endl;

cout << "paa = " << paa << endl;

cout << "pbb = " << pbb << endl;     

return 0;

derived d(1,2,3);

basea* pa=&d;

baseb* pb=&d;

pa-->int ma;

int mb;  <--pb

int mc;

pa和pb都指向同乙個物件,但是指向了不同的位置。

第二個問題:

teacher--->people <----student

doctor-->teacher,student

多重繼承可能產生冗餘的成員。

#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

};int main()

{doctor d("delphi", 33);    

d.print();    

// d.teacher::print();

// d.student::print();

return 0;

當多重繼承關係出現閉合時將產生資料冗餘的問題。解決方案:虛繼承。

class people();

class teacher:virtual public people();

class student:virtual public people();

class doctor:public teacher,public strdent

虛繼承能夠解決資料冗餘問題,中間層父類不再關心頂層父類的初始化。

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

當架構設計中需要繼承時,無法確定使用直接繼承還是虛繼承。

c++支援多重繼承的程式設計方式,多重繼承容易帶來問題,可能出現,同乙個物件的位址不同的情況,虛繼承可以解決資料冗餘的問題,虛繼承使得架構設計可能出現問題。

最好不用多重繼承。

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...

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

本文內容來自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 c 中的多重繼承 c 支援編寫 多重繼承 的 乙個子類可以擁有多個父類 子類擁有所有父類 的成員變數 子類繼承 所有父類的 成員變數 子類物件可以當作任意父類物件 使用 多重繼承的語法規則 多重繼承的本質與單繼承相同!多重繼承問題一...

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

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