Re: mandatory/optionally overridable virtual functions
On Mar 2, 12:15 pm, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
Dilip wrote:
struct AbstractBase
{
virtual void mandatory_func() = 0;
virtual void optional_func() { }
};
struct concretebase1 : public AbstractBase
{
virtual void mandatory_func() { }
};
struct concretebase2 : public AbstractBase
{
virtual void mandatory_func() { }
virtual void optional_func() { // do something cool }
};
on the face of it, it does seem natural but somehow I can't get it out
of my mind that I just keep adding virtual functions to AbstractBase
for every *specific* action I want to perform from one of the derived
classes.
Well, *that* doesn't seem sensible. Your motivation here is either
wrong or unclear.
Can I flesh this out a little bit? Lets say I have a client code that
does something like this:
void DoMe(AbstractBase* b1)
{
b1->mandory_func(); // everything is fine and dandy
b1->optional_func(); // no op for whichever classes don't need to
do this
}
If DoMe can be called with any of the concrete dervied classes as
parameter and only one of them needs to implement a particular
operation while the others no-op it out, how would I do it?
> > If I have a lot of such operations I am concerned there
would be a virutal function bloat in AbstractBase.
What's a virtual function bloat? Why are you concerned with it?
I meant metaphorically -- like seeing a lot of unrelated virtual
functions scattered all over AbstractBase with no relation to each
other (making sense only to derived classes that choose to implement
them).
another quick question: in hierarchies like this do you make the dtor
of AbstractBase ordinary or pure virtual (with an empty impl)?