Example:
We have a base class `Base` and three subclasses which all implement their own version of `doSomething()`.

In an intermediate function `f(Base b)`, we want to call the relevant version of `doSomething()` depending on which object has been passed.

Why do we need to declare `doSomething` as a virtual function in `Base`? Surely `b` now points to the correct object so that when we call `b.doSomething`, we know which method needs to be called.

Side Question: If `b` is simply pointing to an object, why does it even need a type?

Oddly enough, this once made perfect sense but I'm starting to have doubts, and questions are arising…