У меня есть базовый класс Base
, из которого выведены Derived1
, Derived2
и Derived3
.
Я построил экземпляр для одного из производных классов, который я сохраняю как Base* a
. Теперь мне нужно сделать глубокую копию объекта, который я буду хранить как Base* b
.
Насколько я знаю, обычным способом копирования класса является использование конструкторов копирования и перегрузка operator=
. Однако, поскольку я не знаю, имеет ли тип a
тип Derived1
, Derived2
или Derived3
, я не могу придумать способ использования либо конструктора копирования, либо operator=
. Единственный способ, я могу придумать, чтобы сделать эту работу, - это реализовать что-то вроде:
class Base
{
public:
virtual Base* Clone() = 0;
};
и реализация Clone
in в производном классе, как в:
class Derivedn : public Base
{
public:
Base* Clone()
{
Derived1* ret = new Derived1;
copy all the data members
}
};
Java, как правило, использует Clone
, может быть, существует больше возможностей С++ для этого?