class Foo {
virtual void unimplementedFunc() = 0;
};
You have a pure virtual function inside Foo, so Foo is an abstract class. In other words, you cannot create an instance Foo. Most derived classes are needed to provide the implementation of a virtual function.
On the other hand, the second version declares a virtual function (not pure) and defines it outside the class. Derived classes can redefine a function to achieve the desired behavior.
. .
class Foo {
virtual void unimplementedFunc() = 0;
};
void Foo::unimplementedFunc() {}