Challenge 1: Static Binding Without virtual — Possible Solution ==================================================================== #include class Shape { public: double area() { return 0; } }; class Circle : public Shape { public: double radius; double area() { return 3.14159 * radius * radius; } }; int main() { Shape *s = new Circle(); static_cast(s)->radius = 5.0; std::cout << s->area() << std::endl; delete s; return 0; } Output: 0 Report: even though s points at a genuine Circle object, calling s->area() through the Shape* returns 0 -- Shape::area()'s own implementation, not Circle::area()'s. This confirms the chapter's own static-binding claim: without virtual, which function gets called is decided at COMPILE TIME based on the POINTER's declared type (Shape*), completely ignoring what kind of object it actually points to at runtime. WHY THIS WORKS AS AN ANSWER ------------------------------ This demonstrates the exact surprising behavior the chapter describes (0, not the real circle area) using a genuinely constructed Circle object accessed through a Shape* pointer, confirming static binding concretely rather than just restating the definition.