Я хотел бы начать с основ и дать класс а virtual
деструктор: компиляторы, как правило, предупреждают о что.
В отношении фактического вопроса маловероятно, что использование override
будет обязательным, так как существует слишком много кода, которое необходимо было бы заплатить. Общее мнение, принятое комитетом по стандартам по таким вопросам, заключается в том, что качество выполнения проблемы : компиляторы полностью свободны от , предупреждая о всех видах потенциально проблематичной декларации. То есть, вы должны лоббировать своего поставщика компилятора или поставщика статического анализатора, чтобы создать предупреждение для этой ситуации. ... и если вы не думаете, что можете заставить продавцов применить чек, создайте его сами! Проверка наличия ключевого слова override
при переопределении функции virtual
с использованием, например, clang довольно проста.
Кроме того, вот пример, когда обязательное использование override
бы не работы:
struct Base1 {
virtual ~Base1() {}
virtual int f() { return 0; }
};
struct Base2 {
int f() { return 1; }
};
template <typename Base>
struct Derived: Base {
int f() { return 2; }
};
int main()
{
Derived<Base1> d1;
Derived<Base2> d2;
}
В шаблоне класса Derived
функция f()
может или не может быть переопределение. Вы не можете условно поставить override
.
Вы рассматривали предложения «похожих вопросов», прежде чем публиковать этот вопрос ?! Об этом неоднократно спрашивали. –
Мне бы очень хотелось получить предупреждение (или, что еще хуже, ошибку) только потому, что я сделал то, что вы написали. –
Добавьте некоторый момент во время процесса стандартизации C++ 0x, который вы могли бы использовать для записи 'class Dervied explicit: public Base' для достижения этого. – Simple