如何在子类中强制重写虚拟函数



让我们假设我有以下代码:

class Base {
virtual void myFunc();
};
class Subclass1 : public Base { // OK
virtual void myFunc() override; // overrides the base function
};
class Subclass2 : public Base { // How to make this fail ?
// does not declare an override for myFunc
};

C++中是否有任何方法可以使编译失败,因为Subclass2没有实现其myFunc()的变体?我知道如何做相反的事情,即使编译失败,因为Subclass1覆盖myFunc()(通过使用final(,但我不知道有任何机制可以在C++11中实现我想要的。

我对以后的C++标准的可能性也很好奇。

您可以强制一个子类级别覆盖一个方法,方法是使其"纯"(virtual method()=0;(,但不能强制多个级别覆盖每个,这不应该是您真正关心的问题。

换句话说,如果向最终用户提供基类(或派生类(,则可以强制他重写(定义(派生类中的方法。如果该用户想再次从他的派生类派生,则由他决定下一个(进一步的(派生类是否需要不同的覆盖。

最新更新