【发布时间】:2020-03-28 12:17:31
【问题描述】:
为什么下面的代码不允许我初始化基类成员:
class A {
public:
int x;
};
class B : public A {
public:
B() : x(0) {} // error
};
虽然以下是:
class A {
public:
int x;
};
class B : public A {
public:
B() { x = 0; } // ok
};
【问题讨论】:
-
“为什么”很难明确回答。但是现代 C++ 问题的解决方案是在 A 类定义中写
public: int x = 0;。 -
成员初始值设定项列表仅适用于类的直接成员,而不适用于继承的成员。您应该考虑创建
A的默认构造函数,在其中初始化A的成员,或者如@hyde 所述,对变量进行内联初始化。
标签: c++ class inheritance constructor initialization