#include <iostream>
using namespace std;
class Clock {
public:
Clock() {
cout << "Clock enabled" << endl;
}
~Clock() {
cout << "Clock disabled" << endl;
}
};
class Bus {
private:
Clock* clock;
public:
Bus(Clock* clk):clock(clk) {
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
Clock clock;
Bus bus;
Driver driver;
// Dependencies must be wired here
public:
// Constructor should set up dependencies
SystemController():bus(&clock),driver(&bus){}
void run(int addr, int val) {
// trigger driver operation
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