先看個編譯多繼承帶來的編譯錯誤
編譯錯誤/*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
***> file name: muti_inherit.cpp
> author: guoqingyao
> mail: stepbystepto@163.com
> created time: 2023年08月11日 星期四 12時38分35秒
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*******/
#include
using namespace std;
class a
;class b : public a
;class c : public a
;class d : public b, public c
;int main()
dotheright@dotheright:~/mylovelycodes/cpp/base/9$
g++ muti_inherit.cpp
muti_inherit.cpp: in function 『int main()』:
muti_inherit.cpp:31:4: error: request for member 『a』 is ambiguous
d.a = 1;
^ muti_inherit.cpp:13:6: note: candidates are: int a::a
int a;
^ muti_inherit.cpp:13:6: note: int a::a
這裡出現的錯誤是d.a 有二義性,這時候我們就要找二義分別是指的什麼?
變數a的一種繼承關係
變數a的另一種繼承關係
a 由兩份copy 所以會有二義性,消除二義性就是a只留乙份,需要用到虛繼承
/*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
***> file name: muti_inherit.cpp
> author: guoqingyao
> mail: stepbystepto@163.com
> created time: 2023年08月11日 星期四 12時38分35秒
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*******/
#include
using namespace std;
class a
;class b :virtual public a
;class c :virtual public a
;class d : public b, public c
;int main()
為什麼需要虛析構函式
這樣做是為了當用乙個基類的指標刪除乙個派生類的物件時,派生類的析構函式會被呼叫。class clxbase virtual clxbase virtual void dosomething class clxderived public clxbase clxderived void dosomet...
C 虛繼承和虛繼承
虛繼承是在多繼承中為了解決衝突而技術。學術一點來說,是指乙個指定的基類,在繼承體系結構中,將其成員資料例項共享給也從這個基類直接或間接派生的其他類。虛繼承非常有用,可以避免多繼承的歧義和多重拷貝。考慮有如下繼承結構。b和c繼承a,d多繼承b c,我們看以下 class a class b publi...
C 為什麼不要多重繼承
不如換種做法?總結多重繼承指的是某個類同時繼承了兩個或以上的其他類。那麼多重繼承存在著什麼問題呢?class machine machine class printer public machine class scanner public machine class printerscanner ...