如何确保方法在C++中覆盖现有的虚拟方法?

mar*_*jno 2 c++ oop virtual overriding

假设我们有一个具有虚方法的基类:

class BaseClass
{
    virtual void MethodToOverride() const
    {
        DoSomething();
    }
};
Run Code Online (Sandbox Code Playgroud)

一个派生类覆盖了该方法(取决于我们可以再次虚拟或不再虚拟的情况):

class DerivedClass : public BaseClass
{
    void MethodToOverride() const
    {
        DoSomethingElse();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们犯了一个错误,例如定义MethodToOverride非const或错误的字符,我们只需定义一个新方法,例如:

void MethodToOverride() {} // I forgot the const 
void MthodToOverride() const {} // I made a typo
Run Code Online (Sandbox Code Playgroud)

因此编译很好,但在运行时会导致不必要的行为.

有没有办法将函数定义为现有函数的显式覆盖,所以如果我错误地定义它,编译器会发出警告?像(我知道它不存在)的东西:

void MethodToOverride() const overrides BaseClass::MethodToOverride() const {} 
Run Code Online (Sandbox Code Playgroud)

Pau*_*lik 6

最好的方法是将方法声明为纯虚拟BaseClass.

class BaseClass 
{ 
    virtual void MethodToOverride() const = 0;
};
Run Code Online (Sandbox Code Playgroud)

如果再次继承实现类(我将其视为半好的实践),则无法控制正确的实现.


vit*_*aut 5

[[override]]属性.但它是C++ 0x的一部分.

如果您正在使用gcc,请考虑-Woverloaded-virtual命令行选项.