<C++学习笔记>:类构造函数的调用顺序

153 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

前言

今天笔记的主要内容是:

  • 多继承的构造顺序

继承的总结

C++支持类的继承机制:

  • 继承是面向对象设计的关键概念之一。

  • 子类可以继承父类的所有公有和保护的数据成员和成员函数。

  • 访问权限为保护的父类,对于子类来说是公有的,但对于其他类来说是无法访问的。

  • 对于派生类来说,基类中的私有成员也是无法访问的

  • C++支持多重继承

  • 多重继承指的是一个类派生于多个基类

  • 多重继承使得子类获取了多个基类的属性

  • 对于上述,无论是继承还是多重继承,我们一般指的是公有方式的继承,即公共继承。

  • 因为在类编程中,公共继承占多数,保护继承和私有继承比较少。


多继承下的构造顺序

无论是单继承还是多继承,派生类的构造函数都会激活所有基类的构造函数。并将相应的参数传递给它们。

在继承机制下,构造对象的顺序为:

  1. 虚继承基类的构造
  2. 非虚继承基类的构造
  3. 成员对象的构造
  4. 类自己的构造

举个例子,看下列代码:

image.png

输出结果如下:

image.png

可以看出:

子类Son的虚基类Base1最先构造。

尽管在子类Son中继承的顺序并不是最前面。

接着,子类的非虚继承Base2其次构造。

子类的成员对象Base3随后构造.

而最后才是子类Son自己构造函数的调用。


写在最后

总结如下:

当一个类继承于基类,并且自身还包含有其他类的成员对象的时候,构造函数的调用顺序为:

  1. 调用基类的构造函数(虚继承优先)
  2. 调用成员对象的构造函数
  3. 调用自身的构造函数

好了,今天的笔记就到这里,欢迎大家到评论区一起讨论!