#include class Shape { public: virtual ~Shape() = default; int shape_val = 10; }; class Drawable { public: virtual ~Drawable() = default; virtual void draw() = 0; }; class Circle : public Shape, public Drawable { public: int circle_val = 20; void draw() override {} }; struct Point { int x, y; }; int main() { Point pt = { 1, 2 }; Point points[] = {{1010,2020}, {3030,4040}, {5050,6060}}; Point *pt_ptr = &points[1]; Point &pt_ref = pt; std::shared_ptr pt_sp(new Point{111,222}); Shape shape{}; Shape &shape_ref = shape; Shape *shape_ptr = &shape; Circle circle{}; Circle &circle_ref = circle; Circle *circle_ptr = &circle; Shape &circle_as_shape_ref = circle; Shape *circle_as_shape_ptr = &circle; Drawable &circle_as_drawable_ref = circle; Drawable *circle_as_drawable_ptr = &circle; return 0; // Set a breakpoint here }