I have two base classes Vehicle
and WorkerUnit
and they have derived classes Bus
and Maintenance
respectively.
The Maintenance
class has to be initialized with a variable of class Vehicle
(or the derived classes of Vehicle
), and the function print()
inside class Bus
is to be called. How do I achieve this?
#include <iostream>
using namespace std;
// Vehicle Class
class Vehicle {
public:
virtual void print() {
cout << "Vehicle print() called" << endl;
}
};
class Bus : public Vehicle {
public:
void print() {
Vehicle::print();
cout << " Bus print() called" << endl;
}
};
// Worker Unit Class
class WorkerUnit {
protected:
Vehicle vehicle;
public:
WorkerUnit(Vehicle vehicle) : vehicle(vehicle) {}
virtual void print() {}
};
class Maintenance : public WorkerUnit {
public:
Maintenance(Vehicle vehicle) : WorkerUnit(vehicle) {}
void print() {
// Problem here where function calls base class Vehicle's print()
// How do I actually call the derived class's print()?
vehicle.print();
}
};
int main(void) {
Bus *bus = new Bus();
Maintenance *m = new Maintenance(*bus);
m->print();
return 0;
}