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
。
是否有一些编译器标志或扩展可以至少在C::foo
上发出警告?为了可读性和正确性,我只想强制所有重写使用override
。
GazimpleWidget(Widget& w)
,显然C::GazimpleWidget(Widget& w)
仍然会简化小部件。只有在尝试将C::GazimpleWidget()
缩写为C::GW()
时才会遇到此类问题。不要这样做。 - MSaltersfoo
是误导性的。真正有意义的函数名很少会无意中发生冲突。如果它们被命名相同,则应该执行相同的操作,然后覆盖可能不是错误。 - MSalters