You have a function which changes a vehicle color. It takes a Vehicle object as parameter.
Now, a Car is a vehicle, as is a boat. So you can say that every Car is a Vehicle but every Vehicle isn’t necesarily a Car.
Your Car, being a subclass of Vehicle, has all the functions and properties of Vehicle + Car specific stuff.
Now, imagine that in your color change function you call MyVehicle->ChangeColor(); but if it’s a car, you want to set the color of the wheels to, so you have to call ChangeWheelColor() which doesn’t exist in your Vehicle class.
So what you have to do is Cast your object to a Car, which is basically “looking at the object as if it were of class X” so that you can use the functions of that class.