A derived class is a specialized version of the base class ("Derived is a kind-of Base"). The upward conversion is perfectly safe, and happens all the time (if I am pointing at a car, I am in fact pointing at a vehicle):
void f(Vehicle* v); void g(Car* c) { f(c); } //perfectly safe; no castNote that the answer to this FAQ assumes we're talking about " public" inheritance; see below on "private/protected" inheritance for "the other kind".