807-C++多继承下,派生类对象有几张虚函数表?
C++多继承下,派生类对象有几张虚函数表?
我们看下面这个示例:
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;class Base1//基类
{public:Base1() : x(1) {}virtual void play() { cout << "Base1::play basketball" << endl; }virtual void dance() { cout << "Base1::dance dance" << endl; }
private:int x;
}; class Base2//基类
{public:Base2() : y(2) {}virtual void print() { cout << "Base2::print hello world" << endl; }
private:int y;
}; class Base3//基类
{public:Base3() : z(3) {}virtual void sing() { cout << "Base3::sing song" << endl; }private:int z;
};class Derived : public Base1, public Base2, public Base3//派生类多继承
{public:Derived() : w(4) {}virtual void play() { cout << "Derived::play basketball" << endl; }virtual void print() { cout << "Derived::print hello world" << endl; }virtual void sing() { cout << "Derived::sing song" << endl; }
private:int w;
};int main()
{Base1* p1 = new Derived();Base2* p2 = new Derived();Base3* p3 = new Derived();p1->play();p2->print();p3->sing();p1->dance();return 0;
}
运行截图:
关于C++多态和继承的知识点,在我的C++专栏有详细的叙述。
我们看今天的重点!
C++多继承下,派生类对象有几张虚函数表?
我们打开VS编译器的工具下的命令行:
执行
cl –d1reportSingleClassLayoutDerived main.cpp
我们可以清楚的看到:派生类对象有三个虚函数表,分别对应于三个基类。
这些东西在编译阶段就生成指令了,哪个类型的基类指针,访问的就是对应的vfptr,找对应的vftable,取虚函数地址,这不是水到渠成的?
807-C++多继承下,派生类对象有几张虚函数表?相关推荐
- C++对象内存布局--①测试虚函数表属于类
C++对象内存布局--①测试虚函数表属于类 测试1:同一个类的多个对象共享同一张虚函数表. //虚函数表.cpp //2010年8月18日 //测试虚函数表,说明虚函数表属于类所有.同一个类的多个 ...
- C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中
C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中 测试2:证明派生类的虚函数的地址跟第一基类的虚函数地址保存在同一张虚函数表中. 派生类有多少个拥有虚函数的基类,派生类对象就有多少 ...
- 【C++】 类的内存对齐、虚函数表
本文分为以下几个部分内容: 什么是内存对齐,为什么要内存对齐 C++的空类,以及没有虚函数和非静态变量的类 C++类的内存分布(成员变量) C++类的内存分布(虚函数) 一个类的情况 继承关系中的 ...
- 类的不同实例化使用一张虚函数表
1 说明 众所周知,每个带有虚函数的类,或者继承具有虚函数类的对象,本身都是会有一个虚函数表的,前者为自身创建的,后者为继承,且虚函数表的指针位置位于类的首四位地址,如下图所示! 如何获取虚函数表地址 ...
- C++对象的内存布局1---基础篇----C++ 虚函数表解析
[-] 前言 虚函数表 一般继承(无虚函数覆盖) 一般继承(有虚函数覆盖) 多重继承(无虚函数覆盖) 多重继承(有虚函数覆盖) 安全性 结束语 附录一:VC中查看虚函数表 附录 二:例程 前言 C++ ...
- C++ 面向对象(二)多态 : 虚函数、多态原理、抽象类、虚函数表、继承与虚函数表
目录 多态 多态的概念 多态的构成条件 虚函数 虚函数的重写 协变(返回值不同) 析构函数的重写(函数名不同) final和override final override 重载, 重写, 重定义对比 ...
- C++ 虚函数表解析 继承
C++ 虚函数表解析 陈皓 http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父 ...
- 虚函数、虚函数表、虚继承
1.虚函数 虚函数的定义: 虚函数必须是类的 非静态成员函数(且非构造函数),其访问权限是public(可以定义为privateor proteceted, 但是对于多态来说,没有意义),在基类的类定 ...
- 【C++】C++虚函数表详细分析(下)
00. 目录 00. 目录 01. 前言 02. 一般继承(无虚函数覆盖) 03. 一般继承(有虚函数覆盖) 04. 多重继承(无虚函数覆盖) 05. 多重继承(有虚函数覆盖) 06. 安全性 01. ...
最新文章
- Linux 线程学习之条件变量
- Linux 上扩展swap分区
- 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
- tomcat日志,用户以及启动时的一些问题
- QQ号双主号要求验证码解决方法
- 如何用相机拍出天空漂亮的云朵
- android space边框,Android中的图片视图的边框?
- 《Excel VBA实战技巧精粹》终于登场了
- 星环Transwarp Data Hub大数据安装学习
- 证件照如何换背景颜色?这几个软件能免费帮你们制作证件照
- 网络中的的一级域名和二级域名和三级域名
- SimpleMind Pro 1.29.1 小巧的思维导图工具
- 切换电脑计算机名称软件,多电脑切换器
- 【docker】Mac下oracle10g下载安装
- Asible简介及部署
- 《阿里云天池大赛赛题解析(深度学习篇)》学习笔记(3)实体识别深度学习方法
- 一站到底题库 mysql_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
- 毕业设计 stm32的人体健康状态检测系统(项目开源)
- STM32F103ZET6程序移植为C8T6+C8T6下载程序flash timeout的解决方案
- 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光、单目深度估计等(最新版)...
热门文章
- 播放器色觉辅助功能开发,助力提升色觉障碍用户的视频观看体验
- 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】
- sqlserver 查询记录数 查系统表秒出
- python 3 爬虫小白PyCharm爬取简单网页信息控制台错误
- 飞书面临3个劣势,那又怎样?
- 龙芯mips64el 微信客户端 ubuntu 微信客户端
- 2013年3月《Testing Experience》电子杂志下载
- FCHD: A fast and accurate head detector快速准确的人头检测代码预测出来的边界框位置不准确的解决方法
- 5 异常、断言和日志
- html5 indexeddb 排序,HTML5 进阶系列:indexedDB 数据库