С++ 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
.