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

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

C++:菱形繼承和虛擬繼承

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

菱形繼承的定義是:兩個子類(派生類)繼承同一個父類(基類),而又有一個子類的同時繼承這兩個子類。

菱形繼承的缺點:存在二義性和數據冗余

可以寫出簡單的菱形繼承的代碼如下:

#include<iostream>using namespace std;class AA{public:	int _a;};class BB :public AA{public:	int _b;};class CC :public AA{public:	int _c;};class DD :public BB, public CC{public:	int _d;};int main(){	DD d;	d._a = 1;	system("pause");	return 0;}

此時,程序無法運行的,顯示如上的錯誤信息,訪問不明確。這是由于DD有兩個父類BB和CC,這兩個同時繼承了AA,同時含有_a,所以應該使用域限定符,才能使得程序正常運行。

#include<iostream>using namespace std;class AA{public:	int _a;};class BB :public AA{public:	int _b;};class CC :public AA{public:	int _c;};class DD :public BB, public CC{public:	int _d;};int main(){	DD d;	d.BB::_a = 0;	d.CC::_a = 1;	system("pause");	return 0;}這是其中一種方法,但是程序的二義性與數據冗余性并沒有消除,所以可以使用虛擬繼承,代碼如下:

class AA{public:	int _a;};class BB :virtual public AA{public:	int _b;};class CC :virtual public AA{public:	int _c;};class DD :public BB, public CC{public:	int _d;};int main(){	DD d;	d._a = 1;	d._b = 2;	d._c = 3;	d._d = 4;	system("pause");	return 0;}通過比較分析可以得到下面兩個對象模型:


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

圖片精選

主站蜘蛛池模板: 罗山县| 平利县| 都安| 黔南| 安康市| 两当县| 大新县| 蓬莱市| 攀枝花市| 萝北县| 博客| 景泰县| 德清县| 诸暨市| 天峻县| 共和县| 奉新县| 哈尔滨市| 抚远县| 房山区| 合江县| 镶黄旗| 康马县| 武邑县| 平潭县| 思茅市| 恭城| 长寿区| 宁南县| 余庆县| 越西县| 江西省| 舒兰市| 铅山县| 柘城县| 鹰潭市| 鄄城县| 南江县| 五寨县| 上饶市| 瑞丽市|