Project 3
#include <iostream>
#include <vector>
#include <string>
enum 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;
}
void setOdometer(int odometer) {
this->odometer = odometer;
}
virtual Type getType() const = 0;
virtual ~Vehicle() {}
virtual void checkTireRotation() const {
int tireCycle = 50000; // km
int remainder = odometer % tireCycle;
if (odometer >= tireCycle && remainder >= 0) {
std::cout << "Tire rotation advised for " << make << " " << model << "." << std::endl;
} else {
std::cout << "Tires are good to go for " << make << " " << model << "." << std::endl;
}
}
virtual void checkChargerPower() const {
int rechargeDistance = 400; // km
if (odometer >= rechargeDistance) {
std::cout << "Battery recharge advised for " << make << " " << model << "." << std::endl;
} else {
std::cout << "Vehicle is good to go for " << make << " " << model << "." << std::endl;
}
}
virtual void getCarInformation() const {
std::cout << make << " " << model << " (" << year << ")" << std::endl;
std::cout << "Odometer: " << odometer << " km" << std::endl;
}
};
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() const override {
return GAS;
}
std::string getFuelType() const {
return "Gasoline";
}
};
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() const override {
return DIESEL;
}
std::string getFuelType() const {
return "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() const override {
return ELECTRIC;
}
void checkTireRotation() const override {
// Electric cars don't have engine oil or spark plugs
Vehicle::checkTireRotation();
}
void checkChargerPower() const override {
// Electric cars don't have fuel tanks or fuel filters
Vehicle::checkChargerPower();
}
std::string getFuelType() const {
return "Electric";
}