我正在努力进行类继承构造顺序。假设我有这两个类:
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,因为类继承Ex的工作原理如下:
有没有办法强制成员常量首先初始化?这是最干净的方法吗?
答案 0 :(得分:5)
您的常量B::CONSTANT_B
可以是static
,因为它不依赖于构造函数参数。
static
(除非它们也是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();
}
};