在继承中更改构造函数的顺序
Change the order of constructors in inheritance
我在阶级继承构建顺序中挣扎。假设我有这两个类:
class A {
public:
const int CONSTANT_A;
A(const int constant) : CONSTANT_A(constant) {
}
void write() {
std::cout << CONSTANT_A;
}
};
class B : public A {
public:
const int CONSTANT_B = 3;
B() :A(CONSTANT_B) {
write();
}
};
创建新对象B
时,CONSTANT_A
不是3
- 构造总是从基类开始。如果有多个基类,则它是从左多数基础开始的。
- 然后是会员字段的转弯。它们是按声明的顺序初始化的。
- 在最后一个班级本身是构建的。
- 驱灾的顺序完全逆转。
是否有一种方法可以迫使成员常数先初始化?哪种是最干净的方法?
您的常数B::CONSTANT_B
可以是static
,因为它不取决于构造函数参数。
static
s在构造类对象之前是初始化的(除非这些对象也是 static
!)。
struct B : A
{
static const int CONSTANT_B = 3;
B() : A(CONSTANT_B)
{
write();
}
};
如果B::CONSTANT_B
本身从构造函数参数中获取了其价值,则您可能必须在 ctor-member-initialiser 中两次命名该参数。据我所知,这没有微不足道的解决方法。
struct B : A
{
const int CONSTANT_B;
B(const int constant)
: A(constant)
, CONSTANT_B(constant)
{
write();
}
};
相关文章:
- 类内初始化与构造函数初始化列表的顺序
- 运算符 new 的执行顺序和构造函数的参数
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 用作成员构造函数参数的函数的求值顺序
- 函数中调用的构造函数的顺序
- 构造函数中初始化列表的计算顺序是否固定?
- 构造函数和析构函数的顺序
- 遵循 C++ 中的构造函数执行顺序
- 更改操作的构造函数顺序
- 构造函数的初始值设定项列表中的函数调用是否按顺序排序?
- 如何维护类成员的顺序,并且仍然有一个可工作的构造函数
- 在继承中更改构造函数的顺序
- C++:初始值设定项列表顺序中的构造函数
- 如何在使用 std::make_tuple 时避免构造函数的未定义执行顺序
- 程序不会按照构造函数进行顺序进行,从而导致非初始化的变量
- 构造函数的调用顺序
- 构造函数和析构函数调用的顺序
- C++构造函数顺序
- 虚拟继承构造函数顺序