With one exception, the declaration (Section 7.4 , p. 251 )of a virtual function in the derived class must
exactly match the way the function is defined in the base. That exception applies to virtuals that return
a reference (or pointer) to a type that is itself a base class. A virtual function in a derived class can
return a reference (or pointer) to a class that is publicly derived from the type returned by the base class
function.