#include <iostream>
#include <memory>
#include <vector>
class MyInterface {
public:
virtual const std::string identify() = 0;
};
class A : public MyInterface {
public:
const std::string identify() {
return std::string("A");
}
};
class B : public MyInterface {
public:
const std::string identify() {
return std::string("B");
}
};
class C : public MyInterface {
public:
const std::string identify() {
return std::string("C");
}
};
int main() {
std::vector<std::shared_ptr<MyInterface>> theVec;
theVec.push_back(std::make_shared<A>());
theVec.push_back(std::make_shared<B>());
theVec.push_back(std::make_shared<C>());
std::cout << theVec[0]->identify();
std::cout << theVec[1]->identify();
std::cout << theVec[2]->identify();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgTXlJbnRlcmZhY2UgewpwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6c3RyaW5nIGlkZW50aWZ5KCkgPSAwOwp9OwogICAgCmNsYXNzIEEgOiBwdWJsaWMgTXlJbnRlcmZhY2UgewpwdWJsaWM6CiAgY29uc3Qgc3RkOjpzdHJpbmcgaWRlbnRpZnkoKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJBIik7CiAgfQp9OwogICAgCmNsYXNzIEIgOiBwdWJsaWMgTXlJbnRlcmZhY2UgewpwdWJsaWM6CiAgY29uc3Qgc3RkOjpzdHJpbmcgaWRlbnRpZnkoKSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJCIik7CiAgfQp9OwoKY2xhc3MgQyA6IHB1YmxpYyBNeUludGVyZmFjZSB7CnB1YmxpYzoKICBjb25zdCBzdGQ6OnN0cmluZyBpZGVudGlmeSgpIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoIkMiKTsKICB9Cn07CgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxNeUludGVyZmFjZT4+IHRoZVZlYzsKICAgIHRoZVZlYy5wdXNoX2JhY2soc3RkOjptYWtlX3NoYXJlZDxBPigpKTsKICAgIHRoZVZlYy5wdXNoX2JhY2soc3RkOjptYWtlX3NoYXJlZDxCPigpKTsKICAgIHRoZVZlYy5wdXNoX2JhY2soc3RkOjptYWtlX3NoYXJlZDxDPigpKTsKICAgIAogICAgc3RkOjpjb3V0IDw8IHRoZVZlY1swXS0+aWRlbnRpZnkoKTsKICAgIHN0ZDo6Y291dCA8PCB0aGVWZWNbMV0tPmlkZW50aWZ5KCk7CiAgICBzdGQ6OmNvdXQgPDwgdGhlVmVjWzJdLT5pZGVudGlmeSgpOwp9