Рассмотрим класс Container
, который в основном хранит вектор unique_ptr
s из Box
объектов и может выполнять некоторые вычисления на них.C++ копии объектов с абстрактными указателями класса
class Container
{
private:
std::vector<std::unique_ptr<Box> > boxes_;
public:
Container(std::vector<std::unique_ptr<Box> > &&boxes): boxes_(std::move(boxes)){}
double TotalVolume() { /* Iterate over this->boxes_ and sum */ }
};
Здесь Box
это абстрактный класс, который имеет чисто виртуальный метод такой, как double Box::Volume()
.
Теперь предположим, что я создаю экземпляр контейнера в основной программе, как:
std::vector<std::unique_ptr<Box> > x;
x.push_back(std::move(std::unique_ptr<Box>(new SquareBox(1.0)));
x.push_back(std::move(std::unique_ptr<Box>(new RectangularBox(1.0, 2.0, 3.0)));
Container c(x);
Как сделать копии c
? Мне нужна функция, которая делает копии базового объекта Box
в boxes_
, но я думаю, что это сложно сделать с базовыми классами?
В любом случае, почему бы вам не использовать std :: vector? –
Danh
Спасибо: C'tor изменился. Что касается не использования 'vector', 'Container', это, по сути, производный класс некоторого базового класса, который имеет виртуальный метод« TotalVolume ». Моя первоначальная проблема заключается не в коробках и контейнерах, а в каком-то сложном проекте, который я пытаюсь расширить. –
Salmonstrikes