#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;
}