Challenge

Project 3

//ANSWER FOR PROJECT.3

#include <iostream>

#include <string>

#include <vector>

// Enum for fuel types

enum class FuelType { GAS, DIESEL, ELECTRIC };

// Vehicle class

class Vehicle {

protected:

std::string make;

std::string model;

int year;

long int odometer;

public:

Vehicle(std::string make = "", std::string model = "", int year = 0, int odometer = 0)

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

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

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

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

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

int getYear() const { return year; }

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

long int getOdometer() const { return odometer; }

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

virtual FuelType getFuelType() const = 0;

void checkTireRotation() const {

int remainder = odometer - 50000;

if (remainder > 0)

std::cout << "Please replace tires" << std::endl;

else

std::cout << "Tires are in good condition. Remaining: " << (0 - remainder) << std::endl;

}

virtual void checkOil() const {

int remainder = odometer - 5000;

if (remainder > 0)

std::cout << "Oil changed" << std::endl;

else

std::cout << "Oil change not required" << std::endl;

}

virtual void checkChargerPower() const {

int distance = getOdometer();

if (distance >= 400)

std::cout << "Recharge battery" << std::endl;

else

std::cout << "Batteries are good to go" << std::endl;

}

virtual void getCarInformation() const {

std::cout << "Make: " << make << std::endl;

std::cout << "Model: " << model << std::endl;

std::cout << "Year: " << year << std::endl;

std::cout << "Odometer: " << odometer << std::endl;

}

};

// GasCar class

class GasCar : public Vehicle {

public:

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

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

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

void checkChargerPower() const override {

std::cout << "Gas car doesn't need to recharge power." << std::endl;

}

};

// DieselCar class

class DieselCar : public Vehicle {

public:

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

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

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

void checkChargerPower() const override {

std::cout << "Diesel car doesn't need to recharge power." << std::endl;

}

};

// ElectricCar class

class ElectricCar : public Vehicle {

public:

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

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

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

void checkChargerPower() const override {

int distance = getOdometer();

if (distance % 300 == 0)

std::cout << "Recharge charger power" << std::endl;

else

std::cout << "Charger power is good" << std::endl;

}

};

int main() {

std::vector<Vehicle*> vehicles;

GasCar gasCar("volkswagon", "polo", 2020, 30000);

DieselCar dieselCar("Bmw", "5-series", 2019, 50000);

ElectricCar electricCar("Benz", "Model S class", 2021, 10000);

vehicles.push_back(&gasCar);

vehicles.push_back(&dieselCar);

vehicles.push_back(&electricCar);

for (const auto& vehicle : vehicles) {

vehicle->getCarInformation();

vehicle->checkTireRotation();

vehicle->checkOil();

vehicle->checkChargerPower();

std::cout << std::endl;

}

return 0;

}

//NB: CHANCES OF MISSING HEADER FILES WHILE UPLOADING

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.