假设我有一个抽象类A
。 A是否有可能强制从它继承的任何类实现某个构造函数原型?
e.g:
class A {
public:
// purely virtual function
virtual void func() = 0;
// what i would like to be able to do
virtual A(Obj) = 0;
};
虽然上面的纯虚函数func
是合法的,但构造函数A(Obj)
不能是虚拟的。我想如果继承自B
的类A
的实例将保持抽象(或某些不可实例或错误的等价物),直到B
覆盖构造函数A(Obj)
。
换句话说,我想强制A
的任何子类实现一个以Obj
为参数的构造函数。这可能吗?
答案 0 :(得分:3)
不,子类可以自由地实现它想要的任何类型的构造函数。
子类构造函数的唯一责任是构造其超类。
因此,超类有可能以较小的方式影响其子类的构造函数的工作方式。例如,如果类的构造函数采用的是一个类的内部类的实例(编辑的代码示例的一个小变体),那么子类需要实例化继承的内部类,以构造其超类,或将现有实例作为参数,它转发到超类的构造函数。
但就这一点而言,就是这样。子类的构造函数的签名完全超出了超类的控制范围。