Почему я иногда вижу в примерах на С++, когда речь идет о подклассовке/наследовании, базовый класс имеет виртуальное ключевое слово, а иногда переопределенная функция имеет также ключевое слово virtual, почему нужно иногда добавлять в подкласс виртуальное ключевое слово? Например:
class Base
{
Base(){};
virtual void f()
......
}
};
class Sub : public Base
{
Sub(){};
virtual void f()
...new impl of f() ...
}
};