【发布时间】:2017-05-13 21:34:52
【问题描述】:
我正在为类继承构造顺序而苦苦挣扎。假设我有这两个类:
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,因为类继承constructors order的工作原理如下:
- 构造总是从基类开始。如果有多个基类,则从最左边的基类开始。
- 然后轮到成员字段。它们按照声明的顺序进行初始化。
- 最后构建了类本身。
- 析构函数的顺序正好相反。
有没有办法强制成员常量首先初始化?哪种方法最干净?
【问题讨论】:
-
B() : A(3), CONSTANT_B(3) {}将确保成员按预期进行初始化。不过,没有办法让CONSTANT_B在As 构造函数之前初始化。
标签: c++ inheritance