【发布时间】:2021-10-03 11:59:09
【问题描述】:
我的派生类应该通过与基类相同的初始化过程,初始化一些变量并设置一些状态。下面是一个简化的例子:
class Base
{
protected:
int x = 0;
Base() { x = 1; }
};
class Sub : public Base
{
public:
void printX()
{
printf("%d", x);
}
};
我的子类“Sub”的默认构造函数会调用基类中受保护的构造函数吗?这意味着如果打印,子类中的 x 将为 1。
编辑:为 printX() 添加返回类型
【问题讨论】:
-
投反对票,因为您可以轻松尝试。
-
在 C++ 中,基类在派生类之前构造。 (其他一些 OO 语言则相反。)
-
@Phil1970 您也可以轻松尝试
int x; std::cout << x;的输出,但除非您已经知道答案,否则您无法轻易知道它有什么问题。反复试验可能会产生误导 -
@463035818_is_not_a_number 观察到 1 被打印就足以确定 90%。然后他可以在构造函数中添加一个额外的
printf来确定。显示缺乏努力的另一个原因是代码无法编译,因为声明中缺少printX返回类型。使用调试器也很容易检查。 -
@Phil1970 一般不鼓励反对投票。我们可以继续讨论,我不会同意。没关系。
标签: c++ inheritance constructor subclass protected