#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; }
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