Должен ли я указывать "виртуальный" снова, когда я переопределяю функцию С++?
Когда я переопределяю виртуальную функцию:
class Geoff
{
public:
virtual int getArea() { return 0; }
}
Должен ли я указывать "виртуальный" снова, когда я его переопределяю? Разве это имеет значение? Я знаю, что оба способа, похоже, работают нормально, просто интересно, есть ли что-то еще, чем это.
class George : public Geoff
{
public:
virtual int getArea() { return x*y; }
}
Ответы
Ответ 1
Если вы используете С++ 11, вы должны вместо этого использовать override
, который оба документа, которые вы переопределяете виртуальную функцию и проверяет, существует ли соответствующая виртуальная функция в базе для переопределения.
int getArea() override { return x*y; }
В С++ 03 это стилистический выбор - поместите virtual
, если вы чувствуете, что он добавляет значение документации.
Ответ 2
Нет, используйте переопределение. (http://en.cppreference.com/w/cpp/language/override)
У этого есть преимущество, если он не является виртуальным в родительском объекте.
изменить
Как отметил Марк, он также терпит неудачу, если подпись не соответствует, тогда как виртуальный будет "успешно". Котировки пугалов состоят в том, что несогласованная подпись скроет скрытый метод в базе и создаст новый виртуальный метод, который не связан.