【C++】多重继承的顺序理解
分析代码示例:
#include <iostream>using namespace std;class X
{public: X(){cout<<"X ";}
};
class Y
{public: Y(){cout<<"Y ";}
};
class Z
{public: Z(){cout<<"Z ";}
};
class A
{public: A(){cout<<"A ";}
};
class B
{public: B(){cout<<"B ";}
};
class C : public B, virtual public A
{public: C(){cout<<"C ";}
};
class D : public B, virtual public A
{public: D(){cout<<"D ";}
};
class E : public C, virtual public D, virtual public Z
{ public:X objX;Y objY;E(){cout<<"E ";}
};
int main()
{ E obj;
}
输出结果:
A B D Z B C X Y E
按步骤debug:
多重继承的顺序分析
主要遵循以下几点:
1.先执行各基类的构造函数,再执行对象成员构造函数,后执行派生类构造函数
注:
①处于同一层次的各基类构造函数的执行顺序与声明派生类时所指定的各基类顺序一致,而与派生类的构造函数定义中初始化列表顺序无关。
②若父类构造函数带有参数,必须在最远继承子类初始化列表调用。
2.析构函数的执行顺序与构造函数相反。
3.若同一层次中同时包含虚基类和非虚基类,先调用虚基类的构造函数,再调用非虚基类的构造函数。
4.同一层次中的非虚基类只调用一次。
5.如果派生类的成员与基类的某个成员同名,则派生类将在其作用域隐藏掉该基类成员。(C++ Prime 5)
依据如上分析,则示例代码中:
由3,找到classD
由3,找到classA并执行A()
由1,找到classB并执行B()
由1,执行classD的D()
由3,找到classZ并执行Z()
由3,找到classC
由4,找到classB并执行B()
由1,找到classX并执行X()
由1,找到classY并执行Y()
由1,执行E()
得到结果A B D Z C B X Y E
【C++】多重继承的顺序理解相关推荐
- python导包顺序_2019-03-21 python导入包以及Python程序执行顺序理解
http://codingpy.com/article/python-import-101/ https://segmentfault.com/a/1190000009842139 (一)Python ...
- python多重继承初始化顺序_Python 多重继承顺序
本文借鉴自 http://www.cnblogs.com/panyinghua/p/3283726.html 当类有多个超类,而且超类中有相同的方法时,继承顺序就很重要,如下: class A (de ...
- Java OOP(Object Oriented Programming)个人理解及总结
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...
- python顺序结构有一个入口_高楼万丈平地起,基础要打牢!Python获取类的层次结构和继承顺序...
上一篇内容我们详细了解了Python使用inspect模块获取一个模块.类.实例.函数的信息及帮助文档的方法(参见新手入门到进阶,你不可不知的模块,用Python获取对象的详细信息). 前情提要 今天 ...
- 对C#、.Net、.Net Frameworke、托管和非托管代码的具体理解
通过最近一段时间对C#的复习,发现当初学习的C#开发WinForm应用程序,只是为了当初的项目并没有真正去理解C#..Net..Net Frameworke.托管和非托管代码等一系列知识点的具体含义和 ...
- Python基础编程——多重继承下方法的调用
我们介绍了在继承下面调用父类的构造方法,那么在多重继承下如何调用父类的方法呢?虽然在使用多重继承时需要慎重,但是在实际的项目开发中多重继承却随处可见,因此了解多重继承下调用父类的方法也是很有必要的. ...
- 交叉熵损失函数和focal loss_理解熵、交叉熵和交叉熵损失
交叉熵损失是深度学习中应用最广泛的损失函数之一,这个强大的损失函数是建立在交叉熵概念上的.当我开始使用这个损失函数时,我很难理解它背后的直觉.在google了不同材料后,我能够得到一个令人满意的理解, ...
- C语言程序顺序结构1交换变量,如何将c语言中结构体内的所有类型变量的值输出来...
教了多年<C程序设计>课程,大多学生觉的这门课程难学.其实,按照我们现在的教学大纲和教学要求,只要同学们掌握一些方法,克服心理上畏难.不轻言放弃,是完全可以学好的. <C 程序设计& ...
- mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序
SQL语句书写顺序和执行顺序 (7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9 ...
最新文章
- 【面试招聘】聊聊读研究生应该怎么权衡offer的选择:适合选择恐惧症
- iReport工具的使用(三)
- Opencv实战【3】——图像修复与图像锐化(darling in the franxx)
- android实现3种定位的切换,Android 滑动定位+吸附悬停效果实现
- PyCharm+Python3转换xls文件为xlsx文件格式
- Python爬虫--51job爬取岗位信息并写入txt文件
- PHP调用京东联盟接口以及配置签名
- 台式计算机diy,自己组装DIY台式电脑知识
- python接收163邮件以及下载附件(以163邮箱为例)
- 吉首大学2019年程序设计竞赛(重现赛)A:SARS病毒(找规律 or 推公式+欧拉降幂+快速幂)
- 随笔—我的大学,在人间1
- sqlserver数据库快照和mysql_解析SQLServer视图、数据库快照_MySQL
- static this(尚学堂视频学习总结_002)
- 什么是MRAM(不挥发性磁性随机存储器)
- c# 使用Microsoft.Office.Interop.Excel导出文件时提示 兼容性检查
- steam的游戏服务器在哪个文件夹,使用SteamCMD在Windows上架设Don't Starve Together服务器...
- 医德:《大医精诚》和《希波克拉底誓言》
- 《智能路由器开发指南》核心笔记(全)——转载的
- Web基础-JSON和AJAX
- 如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用
热门文章
- 1000多套HTML+CSS+HTML制作的网页和app
- JAVA基础教程书目录
- 马里兰大学计算机专业水平,马里兰大学帕克分校计算机工程本科专业.pdf
- [附源码]JSP+ssm计算机毕业设计城市垃圾桶管理系统的设计与实现026t5【源码、数据库、LW、部署】
- 四色定理已利用计算机证明,四色定理已利用
- 基于Python所写的飞鸟游戏设计
- 【JUnit】作自己的测试工具MyJUnit
- mac osx 装oracle 11g,macOS 安装Oracle数据库
- 精确打印工具(适合表格套打)
- Windows 进程和作业