#include <iostream>
#include <memory>
#include <vector>
class Parent
{
public:
Parent() {}
virtual void logic() = 0;
//strings and other members of every Child
};
class Child1 : public Parent
{
public:
void logic() override { std::cout << "Hi from Child1." << std::endl; }
};
class Child2 : public Parent
{
public:
void logic() override { std::cout << "Hi from Child2." << std::endl; }
};
class Child3 : public Parent
{
public:
void logic() override { std::cout << "Hi from Child3." << std::endl; }
};
int main() {
std::vector<std::unique_ptr<Parent>> objects;
objects.push_back(std::make_unique<Child1>());
objects.push_back(std::make_unique<Child2>());
objects.push_back(std::make_unique<Child3>());
for(const auto& child : objects)
child->logic();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgpjbGFzcyBQYXJlbnQKewpwdWJsaWM6CiAgICBQYXJlbnQoKSB7fQoKICAgIHZpcnR1YWwgdm9pZCBsb2dpYygpID0gMDsKCiAgICAvL3N0cmluZ3MgYW5kIG90aGVyIG1lbWJlcnMgb2YgZXZlcnkgQ2hpbGQKfTsKCmNsYXNzIENoaWxkMSA6IHB1YmxpYyBQYXJlbnQKewpwdWJsaWM6CiAgICB2b2lkIGxvZ2ljKCkgb3ZlcnJpZGUgeyBzdGQ6OmNvdXQgPDwgIkhpIGZyb20gQ2hpbGQxLiIgPDwgc3RkOjplbmRsOyB9Cn07CgpjbGFzcyBDaGlsZDIgOiBwdWJsaWMgUGFyZW50CnsKcHVibGljOgogICAgdm9pZCBsb2dpYygpIG92ZXJyaWRlIHsgc3RkOjpjb3V0IDw8ICJIaSBmcm9tIENoaWxkMi4iIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKY2xhc3MgQ2hpbGQzIDogcHVibGljIFBhcmVudAp7CnB1YmxpYzoKICAgIHZvaWQgbG9naWMoKSBvdmVycmlkZSB7IHN0ZDo6Y291dCA8PCAiSGkgZnJvbSBDaGlsZDMuIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCmludCBtYWluKCkgewoJc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFBhcmVudD4+IG9iamVjdHM7CglvYmplY3RzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdW5pcXVlPENoaWxkMT4oKSk7CglvYmplY3RzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdW5pcXVlPENoaWxkMj4oKSk7CglvYmplY3RzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdW5pcXVlPENoaWxkMz4oKSk7CgoJZm9yKGNvbnN0IGF1dG8mIGNoaWxkIDogb2JqZWN0cykKCSAgY2hpbGQtPmxvZ2ljKCk7CglyZXR1cm4gMDsKfQ==