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

首頁 > 學院 > 開發設計 > 正文

菱形繼承&菱形虛擬繼承

2019-11-08 18:29:21
字體:
來源:轉載
供稿:網友

菱形繼承模型

模型對應代碼:

#include<iostream>using namespace std;class Base{public:	Base()		:_b1(1){}	virtual void fun1()	{		cout << "Base1::fun1()" << endl;	}	virtual void fun2()	{		cout << "Base1::fun2()" << endl;	}PRivate:	int _b1;};class Base2 :public Base{public:	Base2()		:_b2(1){}	virtual void fun1()	{	cout << "Base2::fun1()" << endl;	}	virtual void fun3()	{		cout << "Base2::fun2()" << endl;	}private:	int _b2;};class Base3 :public Base{public:	Base3()		:_b3(1){}	virtual void fun1()	{		cout << "Base3::fun1()" << endl;	}	virtual void fun3()	{		cout << "Base3::fun2()" << endl;	}private:	int _b3;};class Deriver :public Base2, public Base3{public:	Deriver()		:_d3(3){}	virtual void fun1()	{		cout << "Deriver::fun1()" << endl;	}	virtual void fun4()	{		cout << "Deriver::fun3()" << endl;	}private:	int _d3;};

根據監視窗口及運行結果可以看出Deriver的虛函數存放在第一個虛函數表的最后。菱形虛擬繼承菱形虛擬繼承模型
class Base{public:       Base()              :_b1(1){}       virtual void fun1()       {              cout << "Base1::fun1()" << endl;       }       virtual void fun2()       {              cout << "Base1::fun2()" << endl;       }private:       int _b1;};class Base2:virtual public Base{public:       Base2()              :_b2(2){}       virtual void fun1()       {              cout << "Base2::fun1()" << endl;       }       virtual void fun3()       {              cout << "Base2::fun2()" << endl;       }private:       int _b2;};class Base3:virtual public Base{public:       Base3()              :_b4(3){}       virtual void fun1()       {              cout << "Base3::fun1()" << endl;       }       virtual void fun3()       {              cout << "Base3::fun2()" << endl;       }private:       int _b3;};class Deriver:public Base2,public Base3{public:       Deriver()              :_d3(4){}       virtual void fun1()       {              cout << "Deriver::fun1()" << endl;       }       virtual void fun4()       {              cout << "Deriver::fun4()" << endl;       }private:       int _d4;};

由于是虛繼承所以Base2和Base3中的Base _vfptr存放的是偏移量的地址,根據偏移量可以找到Base。且存放在Deriver中成員變量的后面。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉义市| 凤山市| 本溪市| 河津市| 比如县| 敦化市| 承德市| 乐至县| 皋兰县| 上饶县| 专栏| 中超| 民乐县| 淮南市| 尼玛县| 壤塘县| 双柏县| 巴中市| 广河县| 新化县| 东丰县| 谢通门县| 巴青县| 饶河县| 简阳市| 维西| 葫芦岛市| 观塘区| 乡宁县| 扶沟县| 威远县| 房山区| 布尔津县| 吉林省| 山西省| 永新县| 赣榆县| 东港市| 东港市| 东港市| 静海县|