多重继承构造函数执行顺序
来源:互联网 发布:sql count 大于 编辑:程序博客网 时间:2024/05/18 00:45
{
//派生类成员定义
};
对每个基类可以用不同的继承方式,默认继承方式为private。
在多重继承中,派生类的构造函数与单继承下派生类构造函数相似,它必须负责该派生类所有基类构造函数以及对象成员(如果有的话)构造函数的调用。同时,派生类的参数必须包含完成所有基类、对象成员以及派生类中新增数据成员初始化所需的参数。派生类构造函数执行顺序如下:
(1)所有基类的构造函数,多个基类构造函数的执行顺序取决于定义派生类时所指定的顺序,与派生类构造函数中所定义的成员初始化列表的参数顺序无关;
(2)对象成员的构造函数;
(3)派生类本省的构造函数。
加上虚基类后,它的初始化在语法上与一般多继承的初始化是相同的,但在调用构造函数的顺序上有点差别。
(1)先调用虚基类构造函数,然后调用非虚基类的构造函数。
(2)当同一层有多个虚基类,按照他们的声明顺序调用它们的构造函数;
(3)当虚基类是由非虚基类派生时,则先调用基类构造函数,再调用派生类构造函数。
例1:
class X:public Y,virtual public Z
{
}
X one;
将产生如下调用顺序:
Z()
Y()
X()
这里Z是X的虚基类,故先调用Z的构造函数,再调用Y的构造函数,最后才调用派生类X自己的构造函数.
例2:
class base1
{
....
};
class base2
{
....
};
class level1:public base2,virtual public base1
{
....
};
class level2:public base2,virtual public base1
{
....
};
class toplevel1:public level1,virtual public level2
{
....
};
toplevel1 view;
当产生对象view时,将产生如下调用次序:
base1()
base2()
level2()
base2()
level1()
toplevel1()
toplevel1有两个基类:一个是虚基类level2,l另一个是非虚基类level1.根据规定:应先执行levevl2的构造函数;level2也有两个基类,一个实虚基类base1,另一个是非虚基类base2,应先执行base1的构造函数,再执行base2的构造函数,最后执行level2的构造函数。toplevel1然后执行level1的构造函数,而level1又有两个基类,base1是虚基类,无需再执行其构造函数,base2是非虚基类,因此要先执行base2的构造函数,然后执行level1的构造函数。最后执行toplevel1的构造函数。上例中,对于toplevel1的对象而言,base1是level1的虚基类。
- 多重继承构造函数执行顺序
- 多重继承构造函数执行顺序
- 多重继承构造函数执行顺序
- 多重继承-构造函数与析构函数执行顺序
- c++多重继承的构造执行顺序
- 继承构造函数执行顺序
- 多重继承的构造函数和析构函数的执行顺序(包含虚基类)
- JAVA 继承 构造函数的执行顺序
- 演示继承的构造函数执行顺序
- JAVA 继承 构造函数的执行顺序
- 【java】构造函数的继承执行顺序
- C++多继承构造函数执行顺序
- C++继承时构造函数执行顺序
- 继承下构造函数的执行顺序
- Scala多重继承、多重继承构造器执行顺序及AOP实现
- scala-15Scala多重继承、多重继承构造器执行顺序及AOP实现
- 0015.scala的多重继承、多重继承构造器执行顺序、基于trait的AOP实现
- Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
- UNIX系统编程2<C代码>1
- 弱校ACM奋斗史
- 使用text-overflow:ellipsis对溢出文本显示省略号
- mongoDB之update文档
- [转]kmalloc, vmalloc分配的内存结构
- 多重继承构造函数执行顺序
- 此情可待的伤感爱情日志分享:失去你的那一刻,我的世界不再光明
- iOS内存暴增问题追查与使用陷阱
- Android SDK Manager无法更新的问题解决办法
- 有关CSS的学习
- ASP.NET 面试题
- 分页工具条
- ACM-ICPC比赛随想——刘汝佳
- 如何取消Barracuda Reputation的IP 黑名单