#include <iostream>
using namespace std;
class ClockController {
public:
ClockController() {
cout << "Clock enabled" << endl;
}
~ClockController() {
cout << "Clock disabled" << endl;
}
void write(int offset, int value) {
cout << "Clocked write: " << offset << " " << value << endl;
}
};
class Peripheral {
private:
ClockController& clk;
public:
Peripheral(ClockController& c) : clk(c) {
cout << "Peripheral ready" << endl;
}
~Peripheral() {
cout << "Peripheral stopped" << endl;
}
void writeReg(int offset, int value) {
clk.write(offset, value);
}
};
class Driver {
private:
ClockController clk;
Peripheral periph;
public:
Driver() : periph(clk) {
cout << "Driver started" << endl;
}
void operate(int offset, int value) {
periph.writeReg(offset, value);
}
~Driver() {
cout << "Driver stopped" << endl;
}
};
int main() {
int offset, value;
cin >> offset >> value;
{
Driver drv;
drv.operate(offset, value);
}
return 0;
}
Input
8 55
Expected Output
Clock enabled Peripheral ready Driver started Clocked write: 8 55 Driver stopped Peripheral stopped Clock disabled