#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; }
Test Cases
Test Results
Input
5 10
Expected Output
Clock enabled Bus initialized Driver started Bus write: 5 10 Driver stopped Bus stopped Clock disabled