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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

虛繼承抽象類會(huì)咋樣

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

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

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

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



正在回答

2 回答

這個(gè)是可以運(yùn)行的啊

0 回復(fù) 有任何疑惑可以回復(fù)我~

能把代碼貼出來嗎

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

沒情感的機(jī)器人 提問者

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

沒情感的機(jī)器人 提問者

#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 回復(fù) 有任何疑惑可以回復(fù)我~
#3

沒情感的機(jī)器人 提問者

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

Ch_zaqdt 回復(fù) 沒情感的機(jī)器人 提問者

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

舉報(bào)

0/150
提交
取消
C++遠(yuǎn)征之多態(tài)篇
  • 參與學(xué)習(xí)       66223    人
  • 解答問題       334    個(gè)

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

進(jìn)入課程

虛繼承抽象類會(huì)咋樣

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

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

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