第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

虛繼承抽象類會咋樣

首先先說,我不是那種懶人,我已經(jīng)用VS試驗過了,不過剛突發(fā)奇想覺得很有意思,所以想跟大家分享下。

菱形虛繼承(遠征篇-繼承-6.1),最底層實例化時只有一個最高層的副本,比如B和C繼承A,D繼承B和C,那么實例化D的時候只會實例化一個A的對象。

這節(jié)課有一個知識點叫抽象類(含有純虛函數(shù)的類),這就很有意思了,抽象類無法實例化,必須定義繼承下來的虛函數(shù)才能實例化,那么假設(shè)B和C對同一個A中的虛函數(shù)fun有不同的實現(xiàn),那么D同時繼承B和C,D又只含有一個A的副本,那么D中的fun到底是B中定義,還是C中定義的呢?

答案是無法編譯(虛擬函數(shù) 函數(shù) "A::fun" 的重寫不明確),只有B和C中有且只有一個fun函數(shù)的定義,才可以編譯通過,順利運行。



正在回答

2 回答

這個是可以運行的啊

0 回復 有任何疑惑可以回復我~

能把代碼貼出來嗎

0 回復 有任何疑惑可以回復我~
#1

沒情感的機器人 提問者

代碼我都刪了……待會回去寫一個給你吧
2020-01-10 回復 有任何疑惑可以回復我~
#2

沒情感的機器人 提問者

#include <iostream> using namespace std; class A { public: virtual void fun()=0; }; class B :virtual public A{ public: virtual void fun() { cout << "instance B" << endl; } }; class C :virtual public A { public: virtual void fun2() { cout << "instance C" << endl; } };
2020-01-14 回復 有任何疑惑可以回復我~
#3

沒情感的機器人 提問者

class D :public B,public C { }; int main() { D d; d.fun(); return 0; } //B或C中刪除任意一個fun定義即可通過
2020-01-14 回復 有任何疑惑可以回復我~
#4

Ch_zaqdt 回復 沒情感的機器人 提問者

如果B和C中都是fun,那么對于A來說抽象類都被B和C實現(xiàn)了,然后用D去多繼承B和C就產(chǎn)生了二義性,想要調(diào)用只能是B::fun或者C::fun
2020-01-14 回復 有任何疑惑可以回復我~
查看1條回復

舉報

0/150
提交
取消
C++遠征之多態(tài)篇
  • 參與學習       66226    人
  • 解答問題       329    個

本教程將帶領(lǐng)大家體會面向?qū)ο笕筇匦灾械亩鄳B(tài)特性

進入課程

虛繼承抽象類會咋樣

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號