博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++虚函数以及虚继承图示
阅读量:4154 次
发布时间:2019-05-25

本文共 726 字,大约阅读时间需要 2 分钟。

1. 一般单一继承

只有一个虚表指针,虚表包含所有的虚函数

思考:1. 如果将GrandChild中的h_grandchild前面的virtual去掉,内存中的唯一变化是虚表缺少一项GrandChild::h_grandchild

2.  如果是child: virtual public parent?

output:

addr:0014FA44 sizeof = 28

0:
f1783c = f110c8
GrandChild::g_child()//这个时候要注意,虚函数表里没有f//可以这样理解,虚函数表内的函数和非虚拟继承是一样的,但是基类的位置不一样
Child::h_child()
GrandChild::h_grandchild()
1:
f1784c = fffffffc
 fffffffc
 10
2:
100
3:
1000
4:
0
5:
f17828 = f11041
GrandChild::f()
 Parent::g()
 Parent::h()
6:
10

虚基类肯定是放在最后,但是虚函数表中的内容就比较纠结,只放自己被重载的函数。

child和grandchild的指针地址相同,parent的指针地址在最后

2. 一般多继承

3. 虚基类的多继承

请参考:

附上本人检测内存分布的函数:

typedef void (*Fun)(void);    GrandChild b;    int *ptr;    /*B b;*/    ptr = (int*)&b;    cout <<"addr:" << ptr << " sizeof = " << sizeof(GrandChild) <

本文中的图片均来自:

转载地址:http://speti.baihongyu.com/

你可能感兴趣的文章
JavaScript substr() 方法
查看>>
JavaScript slice() 方法
查看>>
JavaScript substring() 方法
查看>>
HTML 5 新的表单元素 datalist keygen output
查看>>
(转载)正确理解cookie和session机制原理
查看>>
jQuery ajax - ajax() 方法
查看>>
将有序数组转换为平衡二叉搜索树
查看>>
最长递增子序列
查看>>
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>
腾讯的一道面试题—不用除法求数字乘积
查看>>
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
万年历
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>