They can provide base functionality that is going to be needed by other classes but are not complete enough to make sense for objects of that type to exist in their own right.
Making an instance of a shape, without being more specific may well not be very helpful.
If you have a pure virtual function in the base class and don’t have a definition of this function in a derived class, a pure virtual function will be inherited. As a result the derived class is an abstract class too.