DieselHardTop is both a Diesel and a Car, but if you define new virtual functions at the Diesel level, they can't be called via the Car interface (without downcasting).

i.e., you can't do this:

Code:
Car * car = new DieselHardTop;

car->DieselOnlyMemberFunction();
But of course, you can do this:

Code:
Diesel * car = new DieselHardTop;

car->DieselOnlyMemberFunction();