On Jul 4, 10:12 am, k...@bytebrothers.co.uk wrote:
Dear mentors and gurus,
I noticed at the end of section 22.4 of the 'FAQ-Lite' it says "Note
that it is possible to provide a definition for a pure virtual
function, but this usually confuses novices and is best avoided until
later".
I've read through all the later stuff, and (although I may have missed
it) I can't find anything further on this. Can someone please explain
why in all the Halls of Hades you would declare a member function to
be pure virtual (i.e. _must_ be provided by any derived class) and
then provide a definition for it in the Abstract Base Class?!
Thx
If you want to force derived classes to implement a method, yet
provide default behavior each derived class (method) should call. For
example, the base (abstract) class method might generate a common
unique identifier (base) and the derived class method augments it.
You can "define and invoke a pure virtual method, provided it is
invoked statically and not through the virtual mechanism" (excerpt
from "Inside the C++ Object Model" by Stanley Lippman. p160-161). In
this case, 'get_unique_identifier()' would be declared as a pure
virtual method with a default implementation.
For example:
std::string Concrete_derived::get_unique_identifier()
{
std::string uid = Abstract_base::get_unique_identifier(); // gets
a common prefix
return uid += "unique suffix";
}