c++ - 继承类中的构造函数?
问题描述
我正在学习 C++ 中的类继承并阅读以下内容:
构造派生类时,首先构造其基类部分。操作顺序为:
1) 构造基类成员
2)基类构造函数代码被调用
有人可以解释1和2之间的区别吗?如何在不调用基类构造函数的情况下构造基类成员?这不是构造函数的工作吗?
解决方案
在尝试理解派生类构造之前,您应该了解类构造。一个类是如何构建的?构造类时,首先构造其数据成员。构造函数中的执行顺序是:
- 类成员被构造。
- 构造函数体被调用。
如何在不调用构造函数的情况下构造类成员?它们不是,因为这是构造函数工作的一部分。构造函数被调用,此时构造函数构造类成员,然后构造函数执行其主体(在您正在阅读的任何内容中称为其“代码”)。
MyClass::MyClass() // <-- entry point for the constructor
// <-- construct members
{ /* do stuff */ } // <-- the body/code
您可以通过初始化列表控制成员构造,也可以使用成员的默认构造。
准备好继承了吗?唯一的补充是基类被添加到初始化列表的开头。
Derived::Derived() // <-- entry point for the derived class constructor
// <-- construct base class (see below)
// <-- construct members
{ /* do stuff */ } // <-- the body/code
Base::Base() // <-- entry point for the base class constructor
// <-- construct members (a.k.a. step 1)
{ /* do stuff */ } // <-- the body/code (a.k.a. step 2)
更复杂,但基本上和以前一样。
推荐阅读
- javascript - Amazon S3 React build looking for media in wrong directory
- c# - 为什么我的 for 循环没有创建所有可能的组合?
- powershell - 函数使用 Try Catch 停止处理
- assembly - 程序集 68k - 有效地从地址开始清除
- unity3d - 如何以一种可以调整克隆属性以匹配场景视图中的所有其他对象的方式克隆多个游戏对象
- python - unittest 的 assert.equal 在应该返回时没有失败
- objective-c - 更改 NSDatePicker 的默认突出显示颜色
- sql-server - T-SQL - 使用来自同一表的数据更新表 - 不明确的表
- android - VerifyError:拒绝类 android.support.gb,因为它未能通过编译时验证
- javascript - 尝试打开事务时停止使用 react-native-sqlite-storage