#include <iostream> using namespace std; class Driver { public: virtual void transfer() = 0; virtual ~Driver() {} }; class SpiDriver : public Driver { public: void transfer() override { cout << "SPI transfer completed" << endl; } }; class I2cDriver : public Driver { public: void transfer() override { cout << "I2C transfer completed" << endl; } }; // Framework borrows driver interface Driver* g_driver = nullptr; void registerDriver(Driver& driver) { g_driver = &driver; } void frameworkRun() { g_driver->transfer(); } int main() { int mode; cin >> mode; SpiDriver spi; I2cDriver i2c; if (mode == 0) { registerDriver(spi); } else { registerDriver(i2c); } // Driver object may already be destroyed here frameworkRun(); return 0; }
Test Cases
Test Results
Input
0
Expected Output
SPI transfer completed