Some member functions exist in concept, but can't have any actual defn. E.g., suppose I asked you to draw a Shape at location (x,y) that has size 7. You'd ask me, "What kind of shape should I draw?" (circles, squares, hexagons, etc, are drawn differently). In C++, we indicate the existence of the " draw()" method, but we recognize it can (logically) be defined only in subclasses:
class Shape { public: virtual void draw() const = 0; //... ^^^--- "= 0" means it is "pure virtual" };This pure virtual function makes "Shape" an ABC. If you want, you can think of the "= 0" syntax as if the code were at the NULL pointer. Thus "Shape" promises a service to its users, yet Shape isn't able to provide any code to fulfill that promise. This ensures any actual object created from a [concrete] class derived of Shape will have the indicated member fn, even though the base class doesn't have enough information to actually define it yet.