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