类的构造函数调用顺序是什么?

 

类的构造函数调用顺序是什么?

如果一个类有多个基类,基类的构造函数在继承类的构造函数之前被调用。基类的构造函数以被声明的顺序被调用。下面是一个例子:

class Y {...}

class X : public Y {...}

X one;

 

构造函数的调用顺序是下面的顺序:

Y(); // 基类的构造函数

X(); // 继承类的构造函数

对于多基类的情况,下面是一个例子:

class X : public Y, public Z

X one;

构造函数以声明的次序调用。

Y(); // 基类构造函数首先被调用

Z();

X();

虚基类的构造函数在任何非虚基类构造函数前调用。如果构造中包括多个虚基类,它们的调用顺序以声明顺序为准。如果虚类是由非虚类派生而来,那非虚类的构造函数要先被调用。下面是一个例子:

class X : public Y, virtual public Z

X one;

调用顺序如下:

Z(); // 虚基类初始化

Y(); // 非虚基类

X(); // 继承类

下面是一个复杂的例子:

class base;

class base2;

class level1 : public base2, virtual public base;

class level2 : public base2, virtual public base;

class toplevel : public level1, virtual public level2;

toplevel view;

构造函数调用顺序如下:

base(); // 虚基类仅被构造一次

base2();

level2(); // 虚基类

base2();

level1();

toplevel();

如果类继承中包括多个虚基类的实例,基类只被初始化一次。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值