I am reading some C++ text regrading Pure Virtual Functions. As the text says, the form of Pure Virtual Functions declaration, for example, is:
virtual void virtualfunctioname() = 0;
And the text explains: “Since pure virtual function has no body, the programmer must add the notation =0 for declaration of the pure virtual function in the base class.”
I have tried to remove = 0;, that means I only declared virtual void virtualfunctioname(); and things worked fine.
So, why do we need to assign a 0 to the virtual function?
Thanks
If a class has any pure virtual functions, it cannot be instantiated. Also, it forces any derived classes to implement those functions, otherwise they too cannot be instantiated.
So if you remove the
= 0, you’ll just have a normal base class, which may be instantiated, and doesn’t enforce an interface on its derived classes. You’ll only get into trouble if you instantiate a base-class object (or a derived-class object with no override), and then try to invokevirtualfunctionname()on it, because there’s no definition for it, so the linker will complain.[Note, also the claim that “pure virtual functions have no body” is incorrect; you may define an implementation for a pure virtual. The class will still be abstract, though.]