Functions intended to override others should be marked as such. This will improve readability as well as catch typos and type mismatch immediately. It is unfortunate that its use is not required, as backwards compatibility is in the way. Note that GCC 5.1+ has added new warning suggest-override that you can pass as command line option -Wsuggest-override. Perhaps we should use it... class A { virtual void x() {} virtual void y() {} }; class B : public A { void x() override {} // good void y() {} // accepted???? override optional void x(int i) override {} // rejected, as intended void y(int i) {} // accepted, is it intended or not? void x(double d) {} // not sure what happens here. void y(double d) {} // accepted, as it always was. };