Whilst trawling through some old code I came across something similar to the following:
class Base { public: virtual int Func(); ... }; class Derived : public Base { public: int Func(); // Missing 'virtual' qualifier ... };
The code compiles fine (MS VS2008) with no warnings (level 4) and it works as expected – Func is virtual even though the virtual qualifier is missing in the derived class. Now, other than causing some confusion, are there any dangers with this code or should I change it all, adding the virtual qualifier?
The
virtualwill be carried down to all overriding functions in derived classes. The only real benefit to adding the keyword is to signify your intent a casual observer of the Derived class definition will immediately know thatFuncis virtual.Even classes that extend Derived will have virtual Func methods.
Reference: Virtual Functions on MSDN. Scroll down the page to see