Ответ 1
Это не обязательно, но это помогает читаемости, если вы видите только определение производного класса.
§10.3 [class.virtual]/3
Если виртуальная функция-член vf объявлена в классе Base и в классе Derived, полученном прямо или косвенно из Base, объявлена функция-член vf с тем же именем и тем же списком параметров, что и Base:: vf, затем Derived:: vf также является виртуальным (независимо от того, объявлен он или нет), и он переопределяет 97) Base:: vf.
Если сноска 97) в основном утверждает, что если список аргументов отличается, функция не будет переопределяться и не обязательно будет virtual