// train.h #include class Car; class Train { public: Train(); virtual ~Train(); void add(Car *car); float currentWeight() const; // all weights in tons private: std::vector cars; }; class Car { public: Car(); virtual ~Car(); void brake(); virtual float currentWeight() const; virtual float maxWeight() const = 0; virtual float minWeight() const = 0; private: float measuredWeight; }; class Locomotive : public Car { public: Locomotive(); virtual void disengage(); virtual void engage(); float maxWeight() const override; float minWeight() const override; }; class Wagon : public Car { public: Wagon(); virtual float volume() const = 0; // all volumes in cubic feet float maxWeight() const override; float minWeight() const override; private: float unloadedWeight; }; class BoxCar : public Wagon { public: BoxCar(); float volume() const override; }; class Tanker : public Wagon { public: Tanker(); float volume() const override; };