M. *_* E. 7 overriding virtual-functions c++11
我知道override上下文关键字是为了编写更安全的代码而引入的(通过检查virtual具有相同签名的函数)但我感觉不太好,因为override每次我想要覆盖一个时,我似乎都是多余的virtual功能.
override在99%的案例中不使用上下文关键字是不好的做法吗?为什么/什么时候我必须使用它(当我们错误地隐藏虚函数时,编译器警告是不够的)?
编辑:换句话说; override在C++ 11 中使用contextual关键字有什么好处,而如果我们在C++ 03中错误地隐藏虚函数(不使用override上下文关键字),我们总是有编译器警告?
该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;
}
| 归档时间: | 
 | 
| 查看次数: | 444 次 | 
| 最近记录: |