Я написал базовый класс с виртуальным чистым методом и двумя производными классами, которые открыто наследуют этот базовый класс. Я использовал «переопределение» для реализации версий чистого виртуального абстрактного базового класса. В Xcode и многих других IDE обычно есть ключевая команда, которую нужно удерживать при нажатии на объявление метода, которое направит вас прямо к его определению. Я чувствую, что мое виртуальное чистое объявление «связано» с моими переопределенными методами производных классов, потому что я могу переходить от базового класса к производным классам, используя Command + щелчок по виртуальному чистому объявлению, однако я возможность свободно удалить ключевое слово «переопределить» и скомпилировать без ошибок, хотя я всегда считал, что «переопределение» необходимо при реализации определения для чисто виртуального метода. Любая помощь, объясняющая это, была бы отличной:
Вот абстрактный базовый класс:
class MillisecondsHertzValueBase
{
private:
// Removed code to reduce length
public:
MillisecondsHertzValueBase();
virtual ~MillisecondsHertzValueBase();
virtual void calculateValues (const double &input) = 0;
// Removed code to reduce length
};
Вот один из заголовочных файлов производных классов, где я могу свободно удалить ключевое слово «override»:
class MillisecondValues : public MillisecondsHertzValueBase
{
public:
~MillisecondValues();
void calculateValues (const double &input) override;
};
Вот реализация:
MillisecondValues::~MillisecondValues() {}
void MillisecondValues::calculateValues (const double &input)
{
// Removed code to reduce length
}
override
был добавлен в C++11. Сделать это необходимым было бы довольно большим переломным изменением. - person chris   schedule 10.01.2018override
, который означает определение функции с той же сигнатурой в производном классе, и есть ключевое слово (которое было добавлено в С++ 11). Вы должны переопределить абстрактную функцию, но не должны использовать ключевое слово, чтобы сделать переопределение явным (но должны). Это похоже на то, что вам не нужно использоватьvirtual
для переопределения, но следует. - person Slava   schedule 10.01.2018override
. Clang поддерживает предупреждение только в том случае, если вы используете ключевое слово в некоторых местах, но не в других. - person Daniel H   schedule 10.01.2018