Do you have to declare methods replacing a pure virtual function in a base class? If so, why? Because the base class has declared the methods as pure virtual, and therefore MUST exist in derived class, then is should not be necessary to redeclare them in the derived class before you can implement them outside of the class definition. Wouldn't you agree?
Yes you have.
The reason for this is to let the compiler know that the virtual method is being implemented by the derived class since a derived class can also be abstract and have virtual methods. Since compilation units are compiled separately, the compiler would otherwise not know whether a virtual method is implemented by a derived class when compiling another compilation unit that uses the derived calss and thus whether it is an abstract class or not.