#include <iostream> using namespace std; class Buffer { private: int data; public: Buffer() { cout << "Buffer created" << endl; } ~Buffer() { cout << "Buffer destroyed" << endl; } void write(int value) { data = value; } int read() const { return data; } }; class RegisterBlock { private: int reg; public: RegisterBlock() { cout << "RegisterBlock created" << endl; } ~RegisterBlock() { cout << "RegisterBlock destroyed" << endl; } void write(int value) { reg = value; } int read() const { return reg; } }; class Driver { private: // Declare Buffer first Buffer buff; // Declare RegisterBlock second RegisterBlock regBlock; public: // Constructor must store input values Driver(int a, int b) { buff.write(a); regBlock.write(b); cout << "Driver initialized" << endl; } void print() const { // Print buffer value cout << "Buffer value: " << buff.read() << endl; // Print register value cout << "Register value: " << regBlock.read() << endl; } // Destructor must print "Driver destroyed" ~Driver() { cout << "Driver destroyed" << endl; } }; int main() { int a, b; cin >> a >> b; { Driver drv(a, b); drv.print(); } return 0; }
Test Cases
Test Results
Input
10 20
Expected Output
Buffer created RegisterBlock created Driver initialized Buffer value: 10 Register value: 20 Driver destroyed RegisterBlock destroyed Buffer destroyed