【C++ Priemr | 15】虚函数表剖析(三)
一、虚拟菱形继承
#include <iostream>
using namespace std;class B {
public:int _b;
};class C1 :virtual public B {
public:int _c1;
};class C2 :virtual public B {
public:int _c2;
};class D :public C1, public C2 {
public:int _d;
};int main()
{cout << sizeof(D); //24return 0;
}
二. 虚拟菱形继承
测试代码:
#include <iostream>
using namespace std;
struct A
{A(int v = 100) : X(v) {};virtual void foo(void) {}int X;
};struct B : virtual public A
{B(int v = 10) :Y(v), A(100) {};virtual void fooB(void) {}int Y;
};struct C : virtual public A
{C(int v = 20) :Z(v), A(100) {}virtual void fooC(void) {}int Z;
};struct D : public B, public C
{D(int v = 40) :B(10), C(20), A(100), L(v) {}virtual void fooD(void) {}int L;
};int main()
{A a;int* ptr;ptr = (int*)&a;cout << ptr << " sizeof = " << sizeof(a) << endl;for (int i = 0; i < sizeof(A) / sizeof(int); i++){if (ptr[i] < 10000){cout << dec << ptr[i] << endl;}elsecout << hex << ptr[i] << " = " << hex << *((int*)(ptr[i])) << endl;}cout << "--------------------------------------" << endl;B b;ptr = (int*)& b;cout << "addr:" << ptr << " sizeof = " << sizeof(b) << endl;for (int i = 0; i < sizeof(B) / sizeof(int); i++){if (ptr[i] < 10000){cout << dec << ptr[i] << endl;}elsecout << hex << ptr[i] << " = " << hex << *((int*)(ptr[i])) << endl;}cout << "--------------------------------------" << endl;D d;ptr = (int*)& d;cout << "addr:" << ptr << " sizeof = " << sizeof(d) << endl;for (int i = 0; i < sizeof(D) / sizeof(int); i++){if (ptr[i] < 10000){cout << dec << ptr[i] << endl;}elsecout << hex << ptr[i] << " = " << hex << *((int*)(ptr[i])) << endl;}return 0;
}
输出结果:
参考资料
- 图说C++对象模型:对象内存布局详解
- 从内存布局看C++虚继承的实现原理
- C++继承内存对象模型
【C++ Priemr | 15】虚函数表剖析(三)相关推荐
- 【C++ Priemr | 15】虚函数表剖析(二)
一.多重继承(无虚函数覆盖) 下面,再让我们来看看多重继承中的情况,假设有下面这样一个类的继承关系.注意:子类并没有覆盖父类的函数. 测试代码: class Base1 { public: virtu ...
- 【C++ Primer | 15】虚函数表剖析(一)
一.虚函数 1. 概念 多态指当不同的对象收到相同的消息时,产生不同的动作 编译时多态(静态绑定),函数重载,运算符重载,模板. 运行时多态(动态绑定),虚函数机制. 为了实现C++的多态,C++使用 ...
- 虚函数表剖析,网上转的,呵呵
http://www.cppblog.com/xczhang/archive/2008/01/20/41508.html C++虚函数表解析(转) C++中的虚函数的作用主要是实现了多态的机制.关于多 ...
- 虚函数与虚函数表剖析(动多态)
探索C++虚函数在g++中的实现 本文是我在追查一个诡异core问题的过程中收获的一点心得,把公司项目相关的背景和特定条件去掉后,仅取其中通用的C++虚函数实现部分知识记录于此. 在开始之前,原谅我先 ...
- C++ 虚函数详解(虚函数表、vfptr)——带虚函数表的内存分布图
前言 总所周知,虚函数是实现多态的基础. 引用或指针的静态类型与对象本身的动态类型的不同,才是C++支持多态的根本所在. 当使用基类的引用或指针调用一个虚函数成员时,会执行动态绑定. 所有的虚函数都必 ...
- 深入剖析C++多态、VPTR指针、虚函数表
在讲多态之前,我们先来说说关于多态的一个基石------类型兼容性原则. 一.背景知识 1.类型兼容性原则 类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代.通过公有继承,派 ...
- C++多态:多态实现原理剖析,虚函数表,评价多态,常见问答与实战【C++多态】(55)
虚函数表 一般继承(无虚函数覆写) 一般继承( 有虚函数覆写) 静态代码发生了什么 评价多态 常见问答与实战 问答 为什么虚函数必须是类的成员函数? 为什么类的静态成员函数不能为虚函数? 为什么构造函 ...
- 图解C++虚函数 虚函数表
图解C++虚函数 2016年07月02日 17:47:17 海枫 阅读数:5181 标签: 虚函数c++g++对象模型C++虚函数更多 个人分类: C/C++/linux 版权声明:本文为博主原创文章 ...
- C++虚函数表解析 (Lawliet 修改+注释版)(附有部分网友的重要评论)
C++ 虚函数表解析 2008-11-14 作者:陈皓 来源:csdn 前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父 ...
最新文章
- volatile怎么实现的内存可见?附面试题答案
- python怎么将if和try一起用_Python使用try/catch还if效率更高一些?
- 10 操作系统第二章 进程管理 死锁、死锁的处理策略 银行家算法
- python下载包突然卡住_【python】python下载视频为什么会卡?
- 网络口协商_以太网端口协商原理
- 设计一个方法,可以实现任意范围内的随机数
- 怎么看神经网络过早收敛_遗传算法的收敛性分析
- Db4o数据库:细说查询
- 机器视觉可以应用到哪些场景中?
- noip2005 篝火晚会
- 计算机信息管理员笔试面试题,网络管理员笔试题目
- Maven常用命令_飘云羽逸_新浪博客
- 【转】GB2312汉字分区及内码表
- 《关键对话》思维导图
- Windows Metro Style颜色色值表
- 不允许一个用户使用一个以上用户名域一个服务器或共享
- 大学生月入过万的创业好项目——自媒体
- 增强 扫描王 源码_OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件...
- Android 拖动条 和 Handle
- Win11电脑睡眠后无法唤醒
热门文章
- 新学了一个用python编写的简单的百度贴吧帖子的爬虫
- HTTP 错误500.19 -Internal Server Error
- cocos2d-x游戏开发系列教程-中国象棋02-main函数和欢迎页面
- 关于varchar2在pl/sql和schema级别的最大值
- antd 表格树如何展开_如何分析工作,找出规律,使用excel大幅度提高工作效率...
- c++ for循环 流程图_python 零基础必知--条件控制与循环语句
- batchplot插件用法_Batchplot批量打印怎么用?Batchplot批量打印教程
- python控件随窗口变化而适配_Tkinter窗口/控件比例调整
- 按钮图片拉伸_图片墙有多香?高手都在用的PPT封面制作技巧!
- 前向验证对于模型的更新作用