国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}通過比較分析可以得到下面兩個對象模型:


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

圖片精選

主站蜘蛛池模板: 宁南县| 西乌| 临朐县| 湖北省| 迭部县| 漠河县| 牙克石市| 建昌县| 民和| 泰宁县| 彩票| 牟定县| 贵德县| 钟山县| 洛浦县| 洱源县| 无锡市| 八宿县| 诸暨市| 米泉市| 应城市| 河曲县| 黎川县| 嘉峪关市| 浦东新区| 攀枝花市| 剑阁县| 海丰县| 合山市| 菏泽市| 定兴县| 彩票| 六盘水市| 常德市| 肇东市| 安溪县| 安徽省| 甘肃省| 华池县| 同德县| 邛崃市|