国产探花免费观看_亚洲丰满少妇自慰呻吟_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個字節,則進一步探索其內存,可直觀的看出其原因。菱形對象模型:菱形虛擬對象模型:多態:當使用基類的指針或引用調用重寫的虛函數時,當指向父類調用的就是父類虛函數,指向子類調用的就是子類虛函數

 

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

圖片精選

主站蜘蛛池模板: 彝良县| 青铜峡市| 边坝县| 惠东县| 大英县| 会理县| 翼城县| 乌拉特后旗| 西畴县| 隆安县| 车险| 潞城市| 安仁县| 遵化市| 福建省| 黎川县| 手游| 济源市| 宿松县| 甘谷县| 连山| 绵竹市| 兰考县| 巴林右旗| 泸定县| 静宁县| 合阳县| 滦南县| 额敏县| 手机| 津南区| 康马县| 腾冲县| 惠来县| 桂阳县| 邢台市| 东方市| 常山县| 许昌市| 静安区| 明光市|