C++ 11添加了override
以确保您编写的要覆盖基类虚函数的成员函数实际上(或不会编译)。要求虚函数覆盖以使用覆盖关键字
但是在一个大的对象层次结构中,有时候你可能会意外地写出一个成员函数,当你不打算这个函数时,它就会覆盖基类虚拟。例如:
struct A {
virtual void foo() { } // because obviously every class has foo().
};
struct B : A { ... };
class C : B {
private:
void foo() {
// was intended to be a private function local to C
// not intended to override A::foo(), but now does
}
};
有一些编译器标志/扩展至少会发布关于C::foo
警告?为了可读性和正确性,我只是想强制所有覆盖使用override
。
在现实中,你的功能将被命名为'GazimpleWidget(窗口小部件&W)'显然'C :: GazimpleWidget(Widget&w)'仍然会记住小部件。当你试图将'C :: GazimpleWidget()'缩写为'C :: GW()'时,你只会遇到这样的问题。不要这样做。 – MSalters 2015-03-19 13:23:12
相关:http://stackoverflow.com/questions/13223277/how-to-enforce-the-override-keyword – 2015-03-19 13:23:25
@MSalters我不明白的注释。 – Barry 2015-03-19 13:28:59