Challenge

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";
}

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.