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