// train.h #include class Car; class Train { public: Train(); virtual ~Train(); void add(Car *car); float currentMt() const; // Current weight in metric tons (Mt) private: std::vector cars; }; class Car { public: Car(); virtual ~Car(); void brake(); virtual float currentMt() const; virtual float maxMt() const = 0; private: float measuredMt; // weight as measured on scale }; class Locomotive : public Car { public: Locomotive(); virtual void disengage(); virtual void engage(); float maxMt() const override; }; class Wagon : public Car { public: Wagon(); virtual float volume() const = 0; // all volumes in cubic feet float maxMt() const override; private: float unloadedMt; }; class BoxCar : public Wagon { public: BoxCar(); float volume() const override; }; class Tanker : public Wagon { public: Tanker(); float volume() const override; float maxMt() const override; };