#include <iostream>
using namespace std;
class Driver {
public:
virtual void startTransfer() = 0;
virtual ~Driver() {}
};
class SpiDriver : public Driver {
public:
void startTransfer() override {
cout << "SPI transfer started" << endl;
}
};
class I2cDriver : public Driver {
public:
void startTransfer() override {
cout << "I2C transfer started" << endl;
}
};
int main() {
int mode;
// Read one integer value from input
if (!(cin >> mode)) return 0;
// Create both driver objects on the stack (Deterministic lifetime)
SpiDriver spi;
I2cDriver i2c;
// Pointer to the base class to enable polymorphism
Driver* selectedDriver = nullptr;
// Select the appropriate driver at runtime
if (mode == 0) {
selectedDriver = &spi;
} else if (mode == 1) {
selectedDriver = &i2c;
}
// Invoke the driver function polymorphically
if (selectedDriver != nullptr) {
selectedDriver->startTransfer();
}
return 0;
}
Expected Output
SPI transfer started