A pure virtual function with a definition is not "just an Interface"; a
pure virtual function with a definition is simply a virtual function
that
must be overridden.
It's still a pure virtual function, but it provides a default definition.
However that default definition must be invoked from a non abstract
derived
class thus preserving the interface concept of PVF's.
Just because a virtual function must be overridden does not mean that
it
makes no sense for its own implementation to be called within the
context
of the class's ctor or dtor; what makes sense depends on the overall
object oriented design of the system of which the virtual function plays
a
part.
Now wait, you have evolved to suggest that the PVF is now simply a
normal
virtual function that must be overridden but this is not the case.
A normal virtual function is inherited and thus can be overridden. With a
PVF there is no inheritence so it cannot be overridden, i.e:
class Base{
public:
virtual void foo();
};
void Base::foo(){std::cout<<"Base foo...\n";}
class Derived : public Base{
public:
//virtual void foo(){std::cout<<"Derived foo..\n";}
};
int main(){
Derived d;
Base* bp =&d;
bp->foo();
}
The above shows how the normal virtual function is inherited and if
Derived::foo is uncommented it would override the Base::foo. But if you
make
Base:foo pure virtual, Derived won't inherit Base::foo at all. If
Base::foo
is pure virtual it must be *implemented*, not overridden, in Derived:
What garbage. My use of the term "overridden" is not incorrect and pure