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