强制子类在 C++ 中实现某个构造函数原型

Con*_*lor 5 c++ polymorphism inheritance constructor

假设我有一个抽象类A。A 是否可以强制从它继承的任何类实现某个构造函数原型?

例如:

class A {
public:
    // purely virtual function
    virtual void func() = 0;
    // what i would like to be able to do
    virtual A(Obj) = 0;
};
Run Code Online (Sandbox Code Playgroud)

虽然上面的纯虚函数func是合法的,但构造函数A(Obj)不能是虚函数。我想B继承自的类的实例是否A将保持抽象(或一些不可实例化或错误的等价物),直到B覆盖构造函数A(Obj)

换句话说,我想强制 的任何子类A实现一个以 anObj作为参数的构造函数。这可能吗?

Sam*_*hik 4

不,子类可以自由地实现它想要的任何类型的构造函数。

子类构造函数的唯一职责是构造其超类。

因此,超类有可能以较小的方式影响其子类的构造函数的工作方式。例如,如果类的构造函数采用的参数是类的内部类的实例(编辑的代码示例的微小变化),则需要子类实例化继承的内部类,以便构造其超类,或者采用现有实例作为参数,它将转发给超类的构造函数。

但就目前情况而言,差不多就是这样了。子类的构造函数的签名完全不受超类的控制。