当执行baseconstructor时使用c++
c++ when is baseconstructor executed?
关于c++继承的一些问题:
基本构造函数的代码执行顺序是什么?
有办法影响这个秩序吗?(例如,其他语言允许在构造函数中的某个位置放置"super()")
在构造函数中访问基类的受保护成员可以吗?
假设类A有i个基类B_i,所有B_i构造函数都在执行A构造函数的任何代码之前执行。唯一的例外是,当您使用非默认构造函数初始化基类时,但一旦它们运行,所有基类都会被执行,而且它们必须在初始化程序列表中排名第一。访问基类的受保护成员是可以的,因为基类已经构造好了。
例如:
class A : public B, C {
A()
: B(1), //B and C are now constructed
memberOfA(memberOfB)
{
}
};
如果您的成员memberOfA
需要来自B的名为memberOfB
的东西,那么这很好,因为B已经构造好了。
构造顺序在c++中定义得很好。构造从完整(大多数派生类型)的初始化列表中开始,所有其他构造函数都从该列表中调用。首先是虚拟基,然后是声明的另一个中的直接基(在trun中,这些基将应用相同的顺序来构造它们自己的基和成员),最后是成员,按照类中声明的顺序,而不是初始化列表中调用构造函数的顺序。
无法影响构造发生的顺序,并且在派生类型的构造中访问基础构件是安全的。可能令人惊讶的是,在相反的方向上,从基构造函数调用虚拟函数。在构建过程的每一步,对象的类型都会发生变化。也就是说,给定一个基为B_i的X类型的对象,只有在所有B_i子对象都完成之后,并且就在X的第一个成员开始之前,该对象的类型才变为X。这意味着在基类中调用虚拟方法将被分派到该基类,而不是被分派到正在构造的最终类型。
总是首先调用"父"/超级类的构造函数。在多重继承的情况下,这是递归的。(这也是你真的不想在C++中使用虚拟行为构造函数的原因之一;)至于访问超级类的成员:这很好,它们是初始化的。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 如何使用原子指针执行双缓冲