виртуальная? переопределить? или оба? C ++ [дубликат]

На этот вопрос уже есть ответ здесь:

Является ли ключевое слово override просто проверкой переопределенного виртуального метода? 5 ответов

в последние недели что-то заставляет меня думать о виртуальности и переопределении. Я узнал, что когда вы делаете наследование с виртуальной функцией, вы должны добавитьvirtual дать компилятору знать, чтобы искать правильную функцию. Впоследствии я также узнал, что в c ++ 11 есть новое ключевое слово - override. Теперь я немного смущен;Нужно ли использовать в моей программе как виртуальные, так и переопределенные ключевые слова, или лучше использовать только одно из них?

Чтобы объяснить себя - приведите примеры того, что я имею в виду:

class Base
{
public:
    virtual void print() const = 0;
    virtual void printthat() const = 0;
    virtual void printit() const = 0;
};

class inhert : public Base
{
public:
    // only virtual keyword for overriding.
    virtual void print() const {}

    // only override keyword for overriding.
    void printthat() const override {}

    // using both virtual and override keywords for overriding.
    virtual void printit() const override {}
};

Какой метод самый лучший?