【问题标题】:How to enforce overriding a virtual function in subclasses如何强制覆盖子类中的虚函数
【发布时间】:2020-12-25 09:08:12
【问题描述】:

假设我有以下代码:

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++ 标准的可能性。

【问题讨论】:

  • 使Base中的函数纯虚拟:virtual void myFunc() = 0;
  • C++ 中没有任何内容需要子类始终覆盖超类中的方法。唯一的要求是纯虚函数必须被正在构造的类或中间子类之一覆盖。这是 C++ 工作的唯一方式。
  • 这能回答你的问题吗? how to implement Interfaces in C++?

标签: c++ c++11


【解决方案1】:

您可以强制 一个 子类级别覆盖一个方法,方法是使其成为“纯” (virtual method()=0;),但您不能强制多个级别 每个 覆盖它再次 - 这不应该是你关心的问题。

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

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2020-04-10
    • 2021-06-14
    • 2018-12-23
    • 1970-01-01
    • 2011-05-21
    • 2015-04-20
    • 2017-11-18
    相关资源
    最近更新 更多