国产探花免费观看_亚洲丰满少妇自慰呻吟_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中成員變量的后面。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开原市| 文成县| 胶州市| 大余县| 晋城| 盐亭县| 永济市| 镇康县| 德庆县| 平远县| 北流市| 海盐县| 龙州县| 广昌县| 镇巴县| 开阳县| 天津市| 东宁县| 长宁区| 桐梓县| 霍邱县| 电白县| 高唐县| 通州区| 安溪县| 临海市| 岳西县| 广昌县| 柳州市| 搜索| 南开区| 泉州市| 岗巴县| 久治县| 长武县| 新平| 沙河市| 兴和县| 米林县| 民丰县| 林甸县|