У меня есть базовый класс 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, может быть, существует больше возможностей С++ для этого?