в последние недели что-то подталкивает мой мозг к виртуальному и переопределению.
Я узнал, что когда вы наследуете виртуальную функцию, вам нужно добавить virtual, чтобы компилятор знал, что нужно искать правильную функцию.
Впоследствии я узнал также, что в С++ 11 есть новое ключевое слово - переопределить. Теперь я немного смущен;  Нужно ли мне использовать как виртуальные, так и переопределяющие ключевые слова в моей программе, или лучше использовать только один из них?
Чтобы объяснить себя - примеры кода, что я имею в виду:
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 {}
};
Каков наилучший метод?
