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

时间:2016-03-16 12:27:57

标签: c++ inheritance constructor polymorphism

假设我有一个抽象类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为参数的构造函数。这可能吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

但就这一点而言,就是这样。子类的构造函数的签名完全超出了超类的控制范围。