#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 &c) : clock(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) {
bus.write(addr, val);
}
~Driver() {
cout << "Driver stopped" << endl;
}
};
class SystemController {
private:
Clock clock;
Bus bus;
Driver driver;
// SystemController must own Clock, Bus, and Driver
// Dependencies must be wired here
public:
// Constructor should set up dependencies
SystemController() :clock(), bus(clock) , driver(bus){
}
void run(int addr, int val) {
// trigger driver operation
driver.operate(addr, val);
}
~SystemController(){
}
};
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