【发布时间】: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++?