You say:
/*When the object in cars[x] is a TaxiVehicle, only the information held in regVehicle is printed. NOTE also that 'point1' in never reached when the program is run */
but you never show any actual code that proves it. How do the values get into cars[0], cars[1], etc? What actually happens when you run the code?
If your problem is really what you say it is, you should be able to say
Vehicle* v = new TaxiVehicle(appropriate arguments);
v->print();
and have it do the wrong thing. But so far all we have is your unsupported claim that it doesn't work.
Please post a small, complete test case that fails.