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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

菱形繼承和虛繼承

2019-11-08 19:55:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.菱形繼承

菱形繼承概念圖: 菱形繼承概念圖

菱形繼承對(duì)象模型: 菱形繼承對(duì)象模型 參照菱形繼承對(duì)象模型,不難發(fā)現(xiàn)若調(diào)用DD類(lèi)時(shí),里面包含兩個(gè)相同的AA類(lèi)的所有成員,在調(diào)用過(guò)程中會(huì)出現(xiàn)二義性和數(shù)據(jù)冗余的問(wèn)題,為了解決上述問(wèn)題,我們提出了虛繼承。接下來(lái)通過(guò)簡(jiǎn)單實(shí)例代碼講解虛函數(shù)及底層實(shí)現(xiàn)。 代碼樣例:

#include <iostream>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(){ DD d; //cout << sizeof(d) << endl; d.BB::_aa = 0; d._bb = 1; d.CC::_aa = 2; d._cc = 3; d._dd = 4; system("pause"); return 0;}

通過(guò)代碼樣例,利用內(nèi)存調(diào)試窗口我們可以觀察到內(nèi)存地址分配以及逐步賦值操作順序和地址。 虛繼承內(nèi)存 圖中的20和12是相對(duì)于AA地址的偏移地址。通過(guò)虛繼承(+viryual關(guān)鍵字),DD中重復(fù)繼承的類(lèi)AA歸于一個(gè),解決了菱形繼承中二義性的問(wèn)題。 通過(guò)應(yīng)用偏移地址,在賦值操作前,將兩個(gè)相同且重復(fù)AA類(lèi)地址分別賦予不同的偏移地址,保證其正確的存儲(chǔ)。AA被分配到最底層的地址,通過(guò)內(nèi)存一步步調(diào)試,觀察賦值過(guò)程。 偏移地址 上圖經(jīng)過(guò)內(nèi)存調(diào)試,通過(guò)地址可以看出其偏移地址。可以看出中間相差8個(gè)字節(jié),通過(guò)多占用8個(gè)字節(jié)的空間,以空間換時(shí)間,解決數(shù)據(jù)冗余的問(wèn)題。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 弋阳县| 九龙县| 岳普湖县| 高平市| 梁河县| 济南市| 丹寨县| 汪清县| 会同县| 景洪市| 措勤县| 石林| 镇雄县| 宁远县| 太仓市| 静海县| 隆子县| 万载县| 开原市| 石楼县| 汕尾市| 汉寿县| 城市| 将乐县| 陕西省| 华坪县| 贵州省| 巴林右旗| 旬阳县| 凭祥市| 陆川县| 金阳县| 谷城县| 綦江县| 大名县| 台江县| 莎车县| 五寨县| 突泉县| 鲜城| 黔西县|