Consider an abstract class called Vehicle. This vehicle has following abstract operations  

- Start
- Break
- Accelerate

```
class Vehicle
{
  public:
     virtual void Start() = 0;
     virtual void Break() = 0;
     virtual void Accelerate() = 0;
};

```

Now consider that we have a special kind of vehicle derived from Vehicle class namely VehicleA.

```
Class VehicleA: public Vehicle
{
   private: 
     double speed;
     double temperature;
     int id;      
     double miles;

   public: 
     void Start();
     void Break();
     void Accelerate();
     void horn();
};

```

If I now have a vehicle which is almost similar to VehicleA type but slightly differs in say the type of engine or some other characteristics like color, which is the best way to accommodate such a small change in the class hierarchy design. Should I 

* define another class VehicleB derived from Vehicle class ? or
* define another class VehicleB derived from VehicleA ? or
* something else ?

Thanks