Я новичок в C ++ и пытаюсь сделать список полиморфным / принимая все, что происходит от базового класса.Проблема в том, что этот список должен быть закрытым, с использованием отдельных методов для его добавления и опроса.
После некоторых исследований мне удалось безопасно приблизиться с помощью умных указателей.
Здесьвот к чему я пришел:
class Shape
{
public:
Shape(std::string name)
{
this->name = name;
}
std::string name;
std::string getName(void)
{
return this->name;
}
};
class ShapeCollector
{
public:
void addShape(Shape shape)
{
this->shapes.push_back(std::make_unique<Shape>("hey"));
}
private:
std::vector <std::unique_ptr<Shape>> shapes;
};
Я хотел бы иметь возможность заменить вызов make_unique параметром shape, однако, похоже, все, что я пытаюсь сделать, работает неправильно.
Я мог бы создатькаждый производный класс внутри ShapeCollector, зеркально отображающий аргументы конструктора в качестве параметров, но это кажется очень интуитивно понятным.
Любая помощь приветствуется!