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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
444 次 |
最近记录: |