An attempt at inheritance (Geometric Shapes)
A second concern is how to prevent creation of Shape objects, since it only represents a concept and nothing tangible. I'm guessing to do this I would need to define the destructor as pure virtual - although I have not reached this stage of reading.


Yep:

class Shape{
public:
    virtual ~Shape() = 0;
};
Shape::~Shape() {}


Now you can't create objects of Shape.