Project 3
Q1.
#include <iostream>
#include <vector>
#include <string>
// 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) {}
const std::string& getMake() const { return make; }
const std::string& getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
virtual void maintenanceActivities() const = 0; // Pure virtual function
virtual ~Vehicle() {} // Virtual destructor
};
// 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) {}
void maintenanceActivities() const override {
// Implement gas car specific maintenance activities
std::cout << "Gas car maintenance activities\n";
}
};
// 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) {}
void maintenanceActivities() const override {
// Implement diesel car specific maintenance activities
std::cout << "Diesel car maintenance activities\n";
}
};
// 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) {}
void maintenanceActivities() const override {
// Implement electric car specific maintenance activities
std::cout << "Electric car maintenance activities\n";
}
};
// Library class
class MaintenanceLibrary {
private:
std::vector<Vehicle*> vehicles;
public:
void addVehicle(Vehicle* vehicle) {
vehicles.push_back(vehicle);
}
void listVehicles() const {
std::cout << "Vehicle Inventory:\n";
for (const auto& vehicle : vehicles) {
std::cout << "Make: " << vehicle->getMake() << ", Model: " << vehicle->getModel()
<< ", Year: " << vehicle->getYear() << ", Odometer: " << vehicle->getOdometer() << "\n";
}
}
// Other functions for updating, removing, etc.
~MaintenanceLibrary() {
for (const auto& vehicle : vehicles) {
delete vehicle;
}
}
};
int main() {
MaintenanceLibrary library;
// Example usage
Vehicle* gasCar = new GasCar("Toyota", "Corolla", 2022, 10000);
Vehicle* dieselCar = new DieselCar("Ford", "F-150", 2021, 20000);
Vehicle* electricCar = new ElectricCar("Tesla", "Model S", 2023, 5000);
library.addVehicle(gasCar);
library.addVehicle(dieselCar);
library.addVehicle(electricCar);
library.listVehicles();
delete gasCar;
delete dieselCar;
delete electricCar;
return 0;
}