#include <iostream>
#include <string>
using namespace std;
class CommDriver {
public:
// TODO:
// Declare two pure virtual functions:
// 1. void send(const string& data)
virtual void send(const string& data) = 0;
// 2. string receive()
virtual string receive()=0;
virtual ~CommDriver() = default;
};
class UartDriver : public CommDriver {
private:
string last;
public:
void send(const string& data) override {
last = data;
cout << "UART SEND: " << data << "\n";
}
string receive() override {
return string("UART RECV: ") + last;
}
};
class SpiDriver : public CommDriver {
private:
string last;
public:
void send(const string& data) override {
last = data;
cout << "SPI SEND: " << data << "\n";
}
string receive() override {
return string("SPI RECV: ") + last;
}
};
int main() {
string type, msg;
cin >> type >> msg;
CommDriver* driver = nullptr;
if (type == "UART") {
driver = new UartDriver();
} else if (type == "SPI") {
driver = new SpiDriver();
}
if (driver) {
driver->send(msg);
cout << driver->receive();
delete driver;
}
return 0;
}
Input
UART Hello
Expected Output
UART SEND: Hello UART RECV: Hello