Re: How many bytes per Italian character?
"Doug Harrison [MVP]" <dsh@mvps.org> wrote in message
news:0r4j13lnde8iolg33cjo9nb43vilqv6nst@4ax.com...
The real question is, "If you can provide a body for a virtual
function, why do you also need to make it pure?" Offhand, the only time I
can recall doing this is when I had a group of functions that together
constituted an interface for saving and restoring state, and the base
class
had a tiny bit of state of its own, and I knew that all derived classes
would implement their own state. It would have been a mistake for any of
the derived classes to fail to override any member of this interface, so
it
made sense to make the virtual functions pure in the base. It made sense
to
give them bodies so that the derived classes could call up to them,
allowing the base to save its state.
The best way to do this would be to forbid bodies of pure virtual functions,
and if the base class ctor needs to do something, then it can call another
(non-virtual) method, e.g.
class CBase
{
public:
CBase()
{
InitBaseState(); // only visible to CBase
}
virtual void InitState() = 0; // derived classes must override,
no body defined!
private:
void InitBaseState(); // not virtual since it's only called from
base ctor
};
Here, both your goals are met without confusion: The base state is
initialized in ctor, and the derived classes clearly must override
InitState().
-- David