Challenge

Project 3

#include <iostream>
#include <vector>
#include <string>

// Enum for fuel types
enum class Type {
    GAS,
    DIESEL,
    ELECTRIC
};

// Vehicle class
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) {}

    // Getters and setters
    void setMake(const std::string& _make) { make = _make; }
    std::string getMake() const { return make; }

    void setModel(const std::string& _model) { model = _model; }
    std::string getModel() const { return model; }

    void setYear(int _year) { year = _year; }
    int getYear() const { return year; }

    void setOdometer(int _odometer) { odometer = _odometer; }
    int getOdometer() const { return odometer; }

    // Virtual method to get fuel type
    virtual Type getType() const = 0;

    // Maintenance activities
    virtual void checkTireRotation() const = 0;
    virtual void checkChargerPower() const = 0;

    // Get car information
    void getCarInformation() const {
        std::cout << "Make: " << make << ", Model: " << model << ", Year: " << year << ", Odometer: " << odometer << std::endl;
    }
};

// GasCar class
class GasCar : public Vehicle {
public:
    GasCar(const std::string& _make, const std::string& _model, int _year, int _odometer)
        : Vehicle(_make, _model, _year, _odometer) {}

    // Override getType method
    Type getType() const override { return Type::GAS; }

    // Override maintenance activities
    void checkTireRotation() const override {
        if (odometer % 50000 == 0)
            std::cout << "Gas car requires tire rotation." << std::endl;
    }

    void checkChargerPower() const override {
        if (odometer % 400 == 0)
            std::cout << "Gas car battery needs recharging." << std::endl;
    }
};

// DieselCar class
class DieselCar : public Vehicle {
public:
    DieselCar(const std::string& _make, const std::string& _model, int _year, int _odometer)
        : Vehicle(_make, _model, _year, _odometer) {}

    // Override getType method
    Type getType() const override { return Type::DIESEL; }

    // Override maintenance activities
    void checkTireRotation() const override {
        if (odometer % 50000 == 0)
            std::cout << "Diesel car requires tire rotation." << std::endl;
    }

    void checkChargerPower() const override {
        if (odometer % 400 == 0)
            std::cout << "Diesel car battery needs recharging." << std::endl;
    }
};

// ElectricCar class
class ElectricCar : public Vehicle {
public:
    ElectricCar(const std::string& _make, const std::string& _model, int _year, int _odometer)
        : Vehicle(_make, _model, _year, _odometer) {}

    // Override getType method
    Type getType() const override { return Type::ELECTRIC; }

    // Override maintenance activities
    void checkTireRotation() const override {
        if (odometer % 50000 == 0)
            std::cout << "Electric car requires tire rotation." << std::endl;
    }

    void checkChargerPower() const override {
        if (odometer % 400 == 0)
            std::cout << "Electric car battery needs recharging." << std::endl;
    }
};

int main() {
    // Example usage
    std::vector<Vehicle*> vehicles;
    vehicles.push_back(new GasCar("Toyota", "Camry", 2020, 25000));
    vehicles.push_back(new DieselCar("Ford", "F-150", 2019, 40000));
    vehicles.push_back(new ElectricCar("Tesla", "Model S", 2021, 10000));

    // Perform maintenance activities
    for (auto vehicle : vehicles) {
        vehicle->checkTireRotation();
        vehicle->checkChargerPower();
    }

    // List vehicle information
    for (auto vehicle : vehicles) {
        vehicle->getCarInformation();
    }

    // Cleanup
    for (auto vehicle : vehicles) {
        delete vehicle;
    }

    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.