虚继承
来源:互联网 发布:24网络交换机怎么连接 编辑:程序博客网 时间:2024/05/21 05:07
///d1reportSingleClassLayout**#include <iostream>using namespace std;/*class A{int a;public:virtual void af(){cout<<"a";}};class C:virtual public A{int b;public:void af(){cout<<"b";}};int main(){C b;b.af();A s;s = b;s.af();}虚继承,若是子类中的虚函数是重写了父类的虚函数,没有重新创建新的虚函数,则就生成一个虚函数表初始内存时先对子类进行初始,然后才对父类?1> class Csize(16):1> +---1> 0| {vbptr} 子类拥有了虚基类表1> 4| b1> +---1> +--- (virtual base A)1> 8| {vfptr}1> 12| a1> +---1> 1> C::$vbtable@:1> 0| 01> 1| 8 (Cd(C+0)A)1> 1> C::$vftable@://在使用子基类自己的虚函数的时候,如何用一个地址在父子基类中的函数中跳转1> | -81> 0| &C::af1> 1> C::af this adjustor: 8*//*class A{int a;virtual void af(){cout<<"a";}};class C:virtual public A{int b;virtual void bf(){cout<<"b";}};int main(){C b;}虚继承:如果子基类中出现与父基类不同的虚函数,则子基类拥有自己的虚函数表虚函数表和虚拟类表的排序1>class Csize(20):1> +---1> 0| {vfptr}1> 4| {vbptr}1> 8| b1> +---1> +--- (virtual base A)1> 12| {vfptr}1> 16| a1> +---1> 1> C::$vftable@C@:1> | &C_meta1> | 01> 0| &C::bf1> 1> C::$vbtable@:1> 0| -41> 1| 8 (Cd(C+4)A)1> 1> C::$vftable@A@:1> | -121> 0| &A::af1> 1> C::bf this adjustor: 0普通的公有继承普通继承先初始父类,然后在初始子类,如果不是class Csize(12):1> +---1> | +--- (base class A)1> 0| | {vfptr}1> 4| | a1> | +---1> 8| b1> +--- //只生成一个虚函数表指针1> 1> C::$vftable@:1> | &C_meta1> | 01> 0| &A::af1> 1| &C::bf1> 1> C::bf this adjustor: 0*//*class A{int a;virtual void af(){cout<<"a";}};class B{int b;virtual void bf(){cout<<"b";}};class C:virtual A,virtual B{int c;void bf(){cout<<"niaho";}//重写bfvirtual void cf(){cout<<"c";}//自己的cf};int main(){C a;cout<<sizeof(a);return 0;}//对于虚继承class Csize(28):1> +---1> 0| {vfptr}1> 4| {vbptr}//虚基表1> 8| c//先创建的是的?1> +---1> +--- (virtual base A)1> 12| {vfptr}1> 16| a1> +---1> +--- (virtual base B)1> 20| {vfptr}1> 24| b1> +---1> 1> C::$vftable@C@: //虚函数表1> | &C_meta1> | 01> 0| &C::cf1> 1> C::$vbtable@: //虚基表1> 0| -41> 1| 8 (Cd(C+4)A)1> 2| 16 (Cd(C+4)B)1> 1> C::$vftable@A@:1> | -121> 0| &A::af1> 1> C::$vftable@B@:1> | -201> 0| &C::bf1> 1> C::bf this adjustor: 201> C::cf this adjustor: 01> 1> vbi: class offset o.vbptr o.vbte fVtorDisp1> A 12 4 4 01> B 20 4 8 01> */
0 0
- 多继承 虚继承
- 类继承、虚继承
- 菱形继承 虚继承
- 继承,虚继承
- 继承及虚继承
- 继承与虚继承
- 继承与虚继承
- 继承(单继承、多继承、菱形继承、虚继承)
- C++ 类继承/虚继承/多重继承
- 多重继承、钻石继承和虚继承
- 11 继承,多重继承与虚继承
- 多重继承,钻石继承和虚继承
- 虚继承
- 虚继承
- 虚继承
- 虚继承
- 虚继承
- 虚继承
- PHP判断访问者是PC端还是移动端
- android使用ShareSdk分享自定义布局问题全解
- 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换
- 移动标签《marquee》
- Js简单学习
- 虚继承
- struts2 的json-default和struts-default的区别
- Shell——基本运算符
- # AJAX学习笔记
- Android驱动开发【NDK模型】———为什么使用NDK
- java多项式求和
- 大数运算项目——取绝对值的问题
- 通过OPC UA和Predix Machine 采集生产设备数据
- ASP.NET 教程之Web Pages I