Подтвердить что ты не робот

В С++ при подклассификации, почему иногда нужно добавить виртуальное ключевое слово к переопределенной функции?

Почему я иногда вижу в примерах на С++, когда речь идет о подклассовке/наследовании, базовый класс имеет виртуальное ключевое слово, а иногда переопределенная функция имеет также ключевое слово virtual, почему нужно иногда добавлять в подкласс виртуальное ключевое слово? Например:

class Base 
{
  Base(){};
  virtual void f()
     ......
  }
};

class Sub : public Base
{
  Sub(){};
  virtual void f()
     ...new impl of f() ...
  }
};
4b9b3361

Ответ 1

Это не обязательно, но это помогает читаемости, если вы видите только определение производного класса.

§10.3 [class.virtual]/3

Если виртуальная функция-член vf объявлена ​​в классе Base и в классе Derived, полученном прямо или косвенно из Base, объявлена ​​функция-член vf с тем же именем и тем же списком параметров, что и Base:: vf, затем Derived:: vf также является виртуальным (независимо от того, объявлен он или нет), и он переопределяет 97) Base:: vf.

Если сноска 97) в основном утверждает, что если список аргументов отличается, функция не будет переопределяться и не обязательно будет virtual