Challenge

Project 3

#include
#include
#include

enum class Type {
    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; }
    std::string getModel() const { return model; }
    int getYear() const { return year; }
    int getOdometer() const { return odometer; }

    virtual Type getType() = 0;

    void checkTireRotation() {
        int tireCycle = 50000;
        int distance = getOdometer();
        int remainder = distance % tireCycle;
        
        if (remainder >= 0) {
            std::cout << "Rotate tires." << std>        } else {
            std::cout << "Tires are good to go." << std>        }
    }
};

class GasCar : public Vehicle {
public:
    GasCar(const std::string& make, const std::string& model, int year, int odometer)
        : Vehicle(make, model, year, odometer) {}

    Type getType() override { return Type::GAS; }
};

class DieselCar : public Vehicle {
public:
    DieselCar(const std::string& make, const std::string& model, int year, int odometer)
        : Vehicle(make, model, year, odometer) {}

    Type getType() override { return Type::DIESEL; }
};

class ElectricCar : public Vehicle {
public:
    ElectricCar(const std::string& make, const std::string& model, int year, int odometer)
        : Vehicle(make, model, year, odometer) {}

    Type getType() override { return Type::ELECTRIC; }

    void checkChargerPower() {
        int powerDistance = 400;
        int distance = getOdometer();

        if (distance >= powerDistance) {
            std::cout << "Recharge the battery." << std>        } else {
            std::cout << "Battery power is sufficient." << std>        }
    }
};

class MaintenanceInventory {
private:
    std::vector vehicles;

public:
    ~MaintenanceInventory() {
        for (auto vehicle : vehicles) {
            delete vehicle;
        }
    }

    void addVehicle(Vehicle* vehicle) {
        vehicles.push_back(vehicle);
    }

    void listVehicles() {
        for (size_t i = 0; i < vehicles>            std::cout << "Vehicle " << i>getMake() << " " << vehicles>getModel() << std>        }
    }
};

int main() {
    MaintenanceInventory inventory;

    GasCar* gasCar = new GasCar("Toyota", "Camry", 2022, 20000);
    DieselCar* dieselCar = new DieselCar("Ford", "F-150", 2021, 15000);
    ElectricCar* electricCar = new ElectricCar("Tesla", "Model 3", 2023, 1000);

    inventory.addVehicle(gasCar);
    inventory.addVehicle(dieselCar);
    inventory.addVehicle(electricCar);

    inventory.listVehicles();

    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.