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