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

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

探究C++中的菱形繼承

2019-11-08 19:49:30
字體:
供稿:網(wǎng)友

菱形繼承

class Person{	int _AA;};class Student:public Person{	int _BB;};class Teacher :public Person{	int _CC;};class Assistant :public Student, public Teacher{	int _DD;};

PS:

Assistant的對(duì)象中存在兩份Person成員

菱形繼承存在二義性和數(shù)據(jù)冗余

解決:

使用虛繼承

首先不使用虛繼承時(shí):

#include<iostream>using namespace std;class AA{public:	string _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(){	DD d;	d.BB::_aa = 1;	d.CC::_aa = 2;	d._bb = 3;	d._cc = 4;	d._dd = 5;	cout << sizeof(d) << endl;	return 0;}

菱形繼承對(duì)象模型:

使用虛繼承時(shí):

#include<iostream>using namespace std;class AA{public:	string _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;	d.BB::_aa = 1;	d.CC::_aa = 2;	d._bb = 3;	d._cc = 4;	d._dd = 5;	cout << sizeof(d) << endl;	return 0;}

菱形虛擬繼承對(duì)象模型:

兩個(gè)空格處地址相差為8,第一個(gè)空格處存放空格處位置到AA的偏移量為20,第二個(gè)空格處存放空格處位置到AA的偏移量為12,浪費(fèi)兩個(gè)空間存放偏移量,AA只需計(jì)算一次。

PS:

1.虛繼承解決了在菱形繼承體系里面子類對(duì)象包含多份父類對(duì)象的數(shù)據(jù)冗余&浪費(fèi)空間的問題。2.虛繼承體系看起來好復(fù)雜,在實(shí)際應(yīng)用我們通常不會(huì)定義如此復(fù)雜的繼承體系。一般不到萬不得已都不要定義菱形結(jié)構(gòu)的虛繼承體系結(jié)構(gòu),因?yàn)槭褂锰摾^承解決數(shù)據(jù)冗余問題也帶來了性能上的損耗。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 巨野县| 原平市| 南陵县| 射洪县| 白玉县| 宜丰县| 伊通| 永泰县| 民乐县| 建瓯市| 巫山县| 湖口县| 牡丹江市| 太康县| 华蓥市| 吴堡县| 饶平县| 新邵县| 农安县| 德令哈市| 伊宁市| 郓城县| 广汉市| 栾城县| 仙居县| 宜都市| 富民县| 紫阳县| 嘉义市| 大冶市| 迁安市| 会理县| 龙州县| 章丘市| 太湖县| 兴城市| 湘阴县| 武陟县| 大竹县| 邵武市| 河东区|