我在以下情况下有点挣扎:假设我有一个类“Base”,它需要一些信息才能正常工作。因此,我设置了一个带有适当参数的构造函数,例如:
class Base {
public: Base(X x, Y y, Z z);
};
这适用于一般的“基地”。但我希望有代表特定“基础”的子类,这些“基础”经常使用,并且包含设置基类所需的所有信息,例如:
class Derived {
public: Derived() {
X x;
x.addSomeInformation("foo bar");
// ...
// now what?
}
};
这里的问题是我不能通过初始化列表调用父构造函数(通常会这样做),因为要移交的参数还不存在。
因此,我觉得我的设计存在严重问题。我可以通过引入一个受保护的默认构造函数和一个模仿普通构造函数的“配置”方法来完成这项工作,但我不确定这是否是一个好主意(主要是因为这样我不能确保子类实际调用“配置“ - 如果不是这样,那会给我留下一个未正确初始化的基类):
class Base {
public: Base(X x, Y y, Z z) { configure(x, y, z); }
protected: Base() {}
protected: void configure(X x, Y y, Z z);
};
class Derived {
public: Derived() {
X x;
// ...
configure(x, y, z);
}
};
如何以适当的方式处理这种情况?