Challenge

Project 2

#include <iostream>

#include <string>

#include <vector>

// Enum for fuel types

enum class Type {

GAS,

DIESEL,

ELECTRIC

};

// Abstract class Vehicle

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) {}

// Getter and setter functions

std::string getMake() const { return make; }

void setMake(const std::string& newMake) { make = newMake; }

std::string getModel() const { return model; }

void setModel(const std::string& newModel) { model = newModel; }

int getYear() const { return year; }

void setYear(int newYear) { year = newYear; }

int getOdometer() const { return odometer; }

void setOdometer(int newOdometer) { odometer = newOdometer; }

// Virtual functions

virtual Type getType() const = 0;

virtual void getCarInformation() const = 0;

};

// Derived class GasCar

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 Type::GAS; }

void getCarInformation() const override {

std::cout << "Gas Car: Make - " << make << ", Model - " << model << ", Year - " << year << ", Odometer - " << odometer << std::endl;

}

};

// Derived class DieselCar

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 Type::DIESEL; }

void getCarInformation() const override {

std::cout << "Diesel Car: Make - " << make << ", Model - " << model << ", Year - " << year << ", Odometer - " << odometer << std::endl;

}

};

// Derived class ElectricCar

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 Type::ELECTRIC; }

void getCarInformation() const override {

std::cout << "Electric Car: Make - " << make << ", Model - " << model << ", Year - " << year << ", Odometer - " << odometer << std::endl;

}

};

// Class to manage inventory and maintenance

class CarManager {

private:

std::vector<Vehicle*> inventory;

public:

~CarManager() {

for (auto& vehicle : inventory) {

delete vehicle;

}

}

void addVehicle(Vehicle* vehicle) {

inventory.push_back(vehicle);

}

void listInventory() const {

std::cout << "Inventory:" << std::endl;

for (const auto& vehicle : inventory) {

vehicle->getCarInformation();

}

}

// Add more functions for update, remove, maintenance tasks

};

int main() {

CarManager manager;

// Add some vehicles to the inventory

manager.addVehicle(new GasCar("Toyota", "Camry", 2020, 50000));

manager.addVehicle(new DieselCar("Ford", "F-150", 2019, 60000));

manager.addVehicle(new ElectricCar("Tesla", "Model S", 2021, 40000));

// List the inventory

manager.listInventory();

return 0;

}

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.