#include <iostream> using namespace std; class OutputStream { public: virtual void write(const char* msg) = 0; virtual ~OutputStream() = default; }; class UartStream : public OutputStream { public: void write(const char* msg) override { cout << "UART:" << msg << "\n"; } }; class SpiStream : public OutputStream { public: void write(const char* msg) override { cout << "SPI:" << msg << "\n"; } }; OutputStream* selectStream(int type) { static UartStream uart; static SpiStream spi; if (type == 1) { return &uart; } if (type == 2) { return &spi; } return nullptr; } void logMessage(OutputStream* stream, const char* msg) { if (stream) { stream->write(msg); } } int main() { int transport; cin >> transport; int n; cin >> n; OutputStream* stream = selectStream(transport); for (int i = 0; i < n; ++i) { char msg[33]; cin >> msg; logMessage(stream, msg); } return 0; }
Test Cases
Test Results
Input
1 2 Hello World
Expected Output
UART:Hello UART:World