What is the effect of making the constructor of the Shape Class Protected ?
What is the effect of not making getShapeNumber() virtual in the Shape class?
Making the constructor protected, means that this class cannot be instantiated unless by a friend class, therefore Shape Class is essentially an abstract class.
Virtual Functions, enables run time polymorphism. If getShapeNumber() is not virtual, then the derived(Circle and Square) classes do not have to provide a definition for this function.
These are my answers, which I am not to sure are correct.