#include <iostream>
using namespace std;
class Clock {
public:
Clock() {
cout << "Clock enabled" << endl;
}
~Clock() {
cout << "Clock disabled" << endl;
}
};
class Bus {
Clock& clock;
public:
Bus(Clock& clock) : clock(clock) {
cout << "Bus initialized" << endl;
}
~Bus() {
cout << "Bus stopped" << endl;
}
void write(int addr, int val) {
cout << "Bus write: " << addr << " " << val << endl;
}
};
class Driver {
Bus& bus;
public:
Driver(Bus& bus) : bus(bus) {
cout << "Driver started" << endl;
}
void operate(int addr, int val) {
bus.write(addr,val);
}
~Driver() {
cout << "Driver stopped" << endl;
}
};
class SystemController {
private:
// SystemController must own Clock, Bus, and Driver
// Dependencies must be wired here
Clock clock;
Bus bus;
Driver driver;
public:
// Constructor should set up dependencies
SystemController() : clock(), bus(clock), driver(bus) {};
void run(int addr, int val) {
driver.operate(addr,val);
}
};
int main() {
int addr, val;
cin >> addr >> val;
{
SystemController sys;
sys.run(addr, val);
}
return 0;
}
Input
5 10
Expected Output
Clock enabled Bus initialized Driver started Bus write: 5 10 Driver stopped Bus stopped Clock disabled