Challenge

Project 3

#include

#include

enum class FuelType

{

    GAS,

    DIESEL,

    ELECTRIC

};

class Vehicle {

protected:

    std::string make;

    std::string model;

    int year;

    int odometer;

public:

    Vehicle(const std::string &make, const std::string &model, int year, int odometer)

        : make(make), model(model), year(year), odometer(odometer) {}

    std::string getMake() const { return make; }

    void setMake(const std::string &make) { this->make = make; }

    std::string getModel() const { return model; }

    void setModel(const std::string &model) { this->model = model; }

    int getYear() const { return year; }

    void setYear(int year) { this->year = year; }

    int getOdometer() const { return odometer; }

    void setOdometer(int odometer) { this->odometer = odometer; }

    virtual FuelType getFuelType() = 0;  // Pure virtual function

    virtual void maintenanceInfo() = 0;   // Pure virtual function

};

class GasCar : public Vehicle {

public:

    GasCar(const std::string &make, const std::string &model, int year, int odometer)

        : Vehicle(make, model, year, odometer) {}

    FuelType getFuelType() override { return FuelType::GAS; }

    void maintenanceInfo() override {

        std::cout << "Gas Car Maintenance Information:\n"

                  << " - Check oil\n"

                  << " - Replace air filter\n"

                  << " - Check tire rotation\n"

                  << " - Check fuel filter\n";

    }

};

class DieselCar : public Vehicle {

public:

    DieselCar(const std::string &make, const std::string &model, int year, int odometer)

        : Vehicle(make, model, year, odometer) {}

    FuelType getFuelType() override { return FuelType::DIESEL; }

    void maintenanceInfo() override {

        std::cout << "Diesel Car Maintenance Information:\n"

                  << " - Check oil\n"

                  << " - Replace fuel filter\n"

                  << " - Check tire rotation\n"

                  << " - Check belts\n";

    }

};

class ElectricCar : public Vehicle {

public:

    ElectricCar(const std::string &make, const std::string &model, int year, int odometer)

        : Vehicle(make, model, year, odometer) {}

    FuelType getFuelType() override { return FuelType::ELECTRIC; }

    void maintenanceInfo() override {

        std::cout << "Electric Car Maintenance Information:\n"

                  << " - Check tire rotation\n"

                  << " - Check charging systems and battery\n";

    }

};

class Maintenance {

public:

    static void checkTireRotation(Vehicle *vehicle) {

        if (vehicle->getOdometer() P000 == 0)

            std::cout << "It's time to rotate tires for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";

        else

            std::cout << "Tire rotation is not required for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";

    }

    static void checkPower(Vehicle *vehicle) {

        if (vehicle->getOdometer() @0 == 0)

            std::cout << "It's time to recharge the battery for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";

        else

            std::cout << "No need to recharge the battery for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";

    }

};

class VehicleInventory {

private:

    std::vector vehicles;

public:

    ~VehicleInventory() {

        for (auto vehicle : vehicles)

            delete vehicle;

    }

    void addVehicle(Vehicle *vehicle) {

        vehicles.push_back(vehicle);

    }

    void listVehicles() {

        int index = 0;

        for (const auto &vehicle : vehicles) {

            std::cout << "Vehicle " << index>

            std::cout << "Make: " << vehicle>getMake() << ", Model: " << vehicle>getModel() << ", Year: " << vehicle>getYear() << ", Odometer: " << vehicle>getOdometer() << "\n";

            std::cout << "Fuel Type: " << static>(vehicle->getFuelType()) << "\n";

            index++;

        }

    }

    void updateVehicle(int index, int newOdometerReading) {

        vehicles[index]->setOdometer(newOdometerReading);

    }

    void removeVehicle(int index) {

        delete vehicles[index];

        vehicles.erase(vehicles.begin() + index);

    }

};

int main() {

    VehicleInventory inventory;

    GasCar gasCar("Toyota", "Corolla", 2020, 40000);

    DieselCar dieselCar("Ford", "F-150", 2019, 55000);

    ElectricCar electricCar("Tesla", "Model S", 2022, 30000);

    inventory.addVehicle(&gasCar);

    inventory.addVehicle(&dieselCar);

    inventory.addVehicle(&electricCar);

    inventory.listVehicles();

    Maintenance::checkTireRotation(&gasCar);

    Maintenance::checkTireRotation(&dieselCar);

    Maintenance::checkTireRotation(&electricCar);

    Maintenance::checkPower(&electricCar);

    inventory.removeVehicle(0);

    inventory.removeVehicle(0);

    inventory.removeVehicle(0);

    return 0;

}

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.