#include <iostream>
using namespace std;
class Clock {
public:
Clock() {
cout << "Clock enabled" << endl;
}
~Clock() {
cout << "Clock disabled" << endl;
}
};
class Bus {
private:
Clock& clk;
public:
Bus(Clock& c) : clk(c) {
cout << "Bus initialized" << endl;
}
~Bus() {
cout << "Bus stopped" << endl;
}
void write(int addr, int val) {
cout << "Bus write: " << addr << " " << val << endl;
}
};
class Driver {
private:
Bus& bus;
public:
Driver(Bus& b) : bus(b) {
cout << "Driver started" << endl;
}
void operate(int addr, int val) {
// perform bus write
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 clk;
Bus bus;
Driver drv;
public:
// Constructor should set up dependencies
SystemController() : bus(clk), drv(bus){}
void run(int addr, int val) {
// trigger driver operation
drv.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