国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 虛表(探索多態的原理)和菱形繼承

2019-11-08 19:45:55
字體:
來源:轉載
供稿:網友

                                    虛表(探索多態原理)和菱形繼承

菱形繼承(多繼承):  兩個子類繼承同一個父類,而又有子類 同時繼承這兩個子類。

菱形繼承關系模型如下圖:

 

菱形繼承的代碼如下:DD的對象中有兩個AA成員

#include<iostream>#include<stdlib.h>using namespace std;class AA{   public:       int _aa;};class BB:public AA{   public:        int _bb;};class CC:public AA{   public:       int _cc;};class DD:public BB, public CC{   public:       int _dd;};int main(){ AA a; BB b; CC c; DD d;// d.aa = 0; cout<<sizeof(a)<<endl; cout<<sizeof(b)<<endl; cout<<sizeof(c)<<endl; cout<<sizeof(d)<<endl; system("pause"); return 0;}

菱形繼承運行結果:

菱形繼承的問題:存在二異性,數據冗余(浪費空間)的問題 

二異性:

void Test(){	//顯示指定訪問哪個父類的成員	DD a;	a.BB::_aa = "xxx";	a.CC::_aa = "yyy";}

菱形虛擬繼承可解決二異性,數據冗余浪費空間的問題(需在子類BB和CC繼承父類AA時加Virtual)

菱形虛擬繼承的代碼如下:
#include<iostream>#include<stdlib.h>using namespace std;class AA{    public:        int _aa;};class BB:virtual public AA{    public:        int _bb;};class CC:virtual public AA{    public:        int _cc;};class DD:public BB, public CC{   public:       int _dd;};int main(){ AA a; BB b; CC c; DD d; d._aa = 0; d._bb = 1; d._cc = 2; d._dd = 3; cout<<sizeof(a)<<endl; cout<<sizeof(b)<<endl; cout<<sizeof(c)<<endl; cout<<sizeof(d)<<endl; system("pause"); return 0;}菱形虛擬繼承的運行結果如下:虛擬繼承雖然解決了二異性和數據冗余的問題,但由兩個運行結果可發現子類的大小并沒有減小反而曾大了,比預算的多出了8個字節,則進一步探索其內存,可直觀的看出其原因。菱形對象模型:菱形虛擬對象模型:多態:當使用基類的指針或引用調用重寫的虛函數時,當指向父類調用的就是父類虛函數,指向子類調用的就是子類虛函數

 

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 措勤县| 汕尾市| 扎兰屯市| 惠安县| 澄迈县| 北川| 尼木县| 苏尼特左旗| 麦盖提县| 南召县| 麻江县| 乌兰浩特市| 邛崃市| 新津县| 兴化市| 景德镇市| 遵义县| 岳阳县| 亳州市| 航空| 郴州市| 蓝田县| 宿州市| 木里| 达孜县| 陇川县| 富平县| 出国| 榆林市| 阳朔县| 小金县| 河池市| 五指山市| 连城县| 界首市| 巴马| 怀来县| 济南市| 固阳县| 尤溪县| 六安市|