In C++ inherited virtual functions remain virtual in the derived class even without the virtual
keyword. It is considered good practice to write virtual
for every inherited function.
Update
As pointed out in the comments in C++ 11 it is considered good practice to include the keyword override
immediately after the declarator. This catches a common class of errors and explicitly makes the intention clear in the code.