Adding a body to a pure virtual/abstract function in C++?

abstract, c++, virtual

Solution

Pure virtual function can have a body, but the fact that you declare them pure virtual is exactly to say that a derived implementation is required.

You can execute the pure virtual method from a derived method (using an explicit `BaseClass::method()`) but still you have to provide an implementation.

Not being able to instantiate a class with a pure virtual method that has not been overriden is the main point of the pure virtual declaration. In other words the idea of declaring a method pure virtual is to ensure that the programmer will not forget about providing its implementation.

Problem

A pure virtual function isn't supposed to have a body, but I just noticed that the following code is accepted by the compiler: ``` class foo { virtual void dummy() = 0 { cout << "hello"; } }; ``` So, why are pure virtual functions allowed to have a body? Also, even when the function has a body, the class still can't be instantiated, why is that?

Original source