我应该始终使用覆盖上下文关键字吗?

M. *_* E. 7 overriding virtual-functions c++11

我知道override上下文关键字是为了编写更安全的代码而引入的(通过检查virtual具有相同签名的函数)但我感觉不太好,因为override每次我想要覆盖一个时,我似乎都是多余的virtual功能.

override在99%的案例中不使用上下文关键字是不好的做法吗?为什么/什么时候我必须使用它(当我们错误地隐藏虚函数时,编译器警告是不够的)?

编辑:换句话说; override在C++ 11 中使用contextual关键字有什么好处,而如果我们在C++ 03中错误地隐藏虚函数(不使用override上下文关键字),我们总是有编译器警告?

Gal*_*lik 9

override关键字是完全有益的,我会建议使用它所有的时间.

如果拼错你的虚函数,它将编译正常,但在运行时程序将调用错误的函数.它将调用基类函数而不是覆盖.

找到它可能是一个非常困难的错误:

#include <iostream>

class Base
{
public:
    virtual ~Base() {}

    virtual int func()
    {
        // do stuff for bases
        return 3;
    }
};

class Derived
: public Base
{
public:

    virtual int finc() // WHOOPS MISSPELLED, override would prevent this
    {
        // do stuff for deriveds
        return 8;
    }
};

int main()
{
    Base* base = new Derived;

    std::cout << base->func() << std::endl;

    delete base;
}
Run Code Online (Sandbox Code Playgroud)

  • 并且还要注意,省略现在冗余的`virtual`,即`int finc()override`可能更简洁 (9认同)