多重继承构造函数执行顺序
来源:互联网 发布:mac 磁盘格式 编辑:程序博客网 时间:2024/04/27 15:18
class 派生类名:继承方式1 基类名1,继承方式2 基类名2,....
{
//派生类成员定义
};
对每个基类可以用不同的继承方式,默认继承方式为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实现
- SQLExpress免费版配置本地数据库实例
- jsp页面验证登录账号
- 字符串转16进制数字
- 如何除掉指甲油
- 捕获所有异常的处理代码
- 多重继承构造函数执行顺序
- hdu2955背包问题
- Android SDK Manager 更新问题
- scratch 不能输入中文
- Java 抽象类、接口、内部类
- oracle创建会话级别的临时表
- CAP原理与最终一致性 强一致性 透析
- Excel操作
- 用Scala重构19楼 Memcached