【发布时间】:2020-06-09 23:15:05
【问题描述】:
我正在学习 C++ 中的类继承并阅读以下内容:
在构造派生类时,会构造它的基类部分 第一的。操作顺序为:
1) 构造基类成员
2) 调用基类构造函数代码
有人能解释一下 1 和 2 的区别吗? 如果不调用基类构造函数,如何构造基类成员?这不是构造函数的工作吗?
【问题讨论】:
-
没有。阅读成员初始化列表:en.cppreference.com/w/cpp/language/constructor
-
成员(和基类)总是在进入构造器主体之前被构造。在构造函数主体中设置成员的任何操作都是赋值,而不是初始化。
-
您在 20 分钟前提出了完全相同的问题。
-
在构造基类时,它的成员首先被初始化(对于作为另一个类的实例的成员,包括执行它们的构造函数)。基类的主体然后执行(例如)修改(例如重新分配)成员在初始化后的值。这会递归地发生——构造派生类的过程首先执行基类的构造函数,然后初始化派生类的成员,然后是派生类构造函数的主体。如果任何碱基是虚拟的,则存在细微差别,但适用相同的一般逻辑。
-
阅读第一条评论 jtbandes 中的链接,了解成员初始化器列表使用示例。它的工作不是防止重新分配。它的工作是初始化。
标签: c++ class inheritance