虚拟继承+虚函数,含有虚函数的菱形虚拟继承
来源:互联网 发布:淘宝客活动报名审核 编辑:程序博客网 时间:2024/05/18 01:03
一、虚拟继承+虚函数
场景①:派生类没有自己的虚函数,只是继承基类的虚函数
我们看一个例子:
class Base{public:virtual void FunTest1(){cout << "Base::FunTest1()" << endl;}virtual void FunTest2(){cout << "Base::FunTest2()" << endl;}int _b;};class Derived :virtual public Base{public:virtual void FunTest1(){cout << "Derived::FunTest1()" << endl;}virtual void FunTest2(){cout << "Derived::FunTest2()" << endl;}int _d;};typedef void(*FunSrc)();void print(Base&b)//打印函数{FunSrc* pfun = (FunSrc*)(*(int*)&b);while (*pfun){(*pfun)();pfun++;}}int main(){Derived d;Derived& d1 = d;d._b = 1;d._d = 2;print(d);system("pause:");return 0;}分析一下:
②派生类有自己的虚函数
class Base{public:virtual void FunTest1(){cout << "Base::FunTest1()" << endl;}virtual void FunTest2(){cout << "Base::FunTest2()" << endl;}int _b;};class Derived :virtual public Base{public:virtual void FunTest1(){cout << "Derived::FunTest1()" << endl;}virtual void FunTest2(){cout << "Derived::FunTest2()" << endl;}virtual void FunTest3(){cout << "Derived::FunTest3()" << endl;}int _d;};typedef void(*FunSrc)();void print(Base&b)//打印函数{FunSrc* pfun = (FunSrc*)(*(int*)&b);while (*pfun){(*pfun)();pfun++;}}void print(Derived&d)//打印函数{FunSrc* pfun = (FunSrc*)(*(int*)&d);while (*pfun){(*pfun)();pfun++;}}
分析一下:
总结:
1.同一个类的对象共用一张虚表;
2.派生类和基类各自的虚表。
二、菱形虚拟继承(含虚函数)
举个例子:
class B{public:virtual void FunTest1(){cout << "B::FunTest1()" << endl;}virtual void FunTest2(){cout << "B::FunTest2()" << endl;}int _b;};class C1 :virtual public B{public:virtual void FunTest1(){cout << "C1::FunTest1()" << endl;}virtual void FunTest3(){cout << "C1::FunTest3()" << endl;}int _c1;};class C2 :virtual public B{public:virtual void FunTest1(){cout << "C2::FunTest1()" << endl;}virtual void FunTest4(){cout << "C2::FunTest4()" << endl;}int _c2;};class D :public C1,public C2{public:virtual void FunTest1(){cout << "D::FunTest1()" << endl;}virtual void FunTest3(){cout << "D::FunTest3()" << endl;}virtual void FunTest5(){cout << "D::FunTest5()" << endl;}int _d;};分析一下:
对于含有虚函数的菱形虚拟继承,我们要考虑的内容就比较复杂了,菱形虚拟继承存在多继承的,多继承的规则要把握好。虚拟继承包括偏移量表格。
阅读全文
1 0
- 虚拟继承+虚函数,含有虚函数的菱形虚拟继承
- 带虚函数的菱形虚拟继承
- 含有虚函数菱形的虚拟继承(没有对虚函数进行重写)
- 拥有虚函数覆盖的菱形继承及菱形虚拟继承
- 菱形继承(虚函数)->菱形虚拟继承(虚函数)->多态系列问题
- 菱形虚拟继承&虚函数表&对象模型
- 继承,菱形继承,多态,虚继承、菱形虚拟继承
- 菱形的虚拟继承
- 继承----有关虚函数和虚拟继承
- 继承:单继承、派生类成员的访问属性、多继承、菱形继承、虚继承,菱形虚拟继承
- 虚拟继承与虚函数继承的内存布局
- 菱形继承&菱形虚拟继承
- 菱形继承&菱形虚拟继承
- 菱形继承--菱形虚拟继承
- C++: 虚表和菱形虚拟继承
- 虚表和菱形虚拟继承
- 虚拟函数和虚拟继承
- 继承*菱形继承与菱形虚拟继承
- [c] windows下编译boost 1.55.0
- 思想才是王道之sql与递归
- 数据结构 P42-43 算法实现 多项式的建立及加法
- VectorDrawable基础知识
- matlab自定义函数的几种方法
- 虚拟继承+虚函数,含有虚函数的菱形虚拟继承
- brainproduct recorder 远程采集脑电波实时数据
- OkHttp
- LeetCode -- Search Insert Position
- bzoj1008: [HNOI2008]越狱
- Tomcat 报错 (The Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config is mi)
- 字符串算法——查找有序数组旋转后最小值(有重复元素)(Find Minimum in Rotated Sorted Array II)
- Cadence_CIS初识
- html学习-表单