【发布时间】:2016-01-14 16:04:02
【问题描述】:
我有一种情况,顶级类需要一个参数,而没有一个子类需要。某类:
class SuperClass {
public:
SuperClass(const int parameter);
}
这是孩子:
class NoParametersInConstructorClass : public SuperClass {
public:
// This will cause an error:
// error: no matching function for call to 'SuperClass::SuperClass(const int)'
NoParametersInConstructorClass() : someText("Hello") {};
private:
std::string someText
}
现在我面临的问题是我确实有一个初始化列表,但我发现重写所有子类中的参数很乏味。我很懒,我知道。我希望它能够在没有明确定义的情况下工作:
// Works even though NoParametersInConstructorClass(const int) isn't defined
NoParametersInConstructorClass variable(66);
当然,如果没有办法,那就没有办法,但是有吗?
【问题讨论】:
-
你能告诉我们你的实际代码吗?子类似乎没有继承基类,所以我不确定我是否理解你的问题。你可以在子类中显式调用超类构造函数
SuperClass(5)。 -
假设你的孩子继承自 base 需要一个参数,当你不给它一个参数时,你想如何调用它的构造函数?编译器应该使用随机数吗?
-
@JameyD 对不起,我忘了写
: public SuperClass。我目前正在使用显式调用。我的实际代码与您看到的几乎相同,只是名称为Graph、BigGraph和sevelar 相似,参数为GraphData*。所以我猜不需要再看更多实际的代码了。 -
您可以只从基类构造函数中删除参数,并在该基构造函数中使用一个常数,这样每个派生类也可以使用一个常数。如果每个派生类的参数需要不同,那么没有其他方法。
-
听起来像是一个坏继承的例子。派生类真的满足多态的is-a要求吗?如果基类真的需要那个参数,子类怎么能忽略呢?
标签: c++ oop inheritance constructor