The abstract base provides the interface for interacting with derived classes. If there are no methods one can use through a pointer or reference to the interface, it kind of misses the point.
It won't compile because draw() is private. In my example I was asking why draw() was public instead of protected, since Shape itself could not call draw().
In your OP, it looks like the constructors were made protected so that an object could not be instantiated from the Shape class. This is an alternative way of achieving the same effect as being abstract, but they have only done this because there were no pure virtual functions.
But all those public functions should be pure virtual, because they form the public interface, non derived classes might need to call them. And derived classes probably need to redefine them.
It is possible to have a protected interface, but this isn't a good situation for that, as I just explained.
It won't compile because draw() is private. In my example I was asking why draw() was public instead of protected, since Shape itself could not call draw().
Whether draw is private or protected, the result is the same. draw would not be accessible and the code would not compile.