Есть ли способ скопировать объект производного класса через указатель на базу? Или как создать такой конструктор копии?Есть ли способ скопировать объект производного класса через указатель на базу?
Например:
class Base {
public: Base(int x) : x(x) {}
private: int x;
};
class Derived1 : public Base {
public:
Derived(int z, float f) : Base(z), f(f) {}
private:
float f;
};
class Derived2 : public Base {
public:
Derived(int z, string f) : Base(z), f(f) {}
private:
string f;
};
void main()
{
Base * A = new *Base[2];
Base * B = new *Base[2];
A[0] = new Derived1(5,7);
A[1] = new Derived2(5,"Hello");
B[0] = Base(*A[0]);
B[1] = Base(*A[1]);
}
вопрос, является ли * В [0] будет объектом Derived1 и * B [1] объект Derived2? Если нет, как я могу скопировать производный класс через указатель на базовый класс? Есть ли конкретный способ построения конструктора-копии через базовый класс или производный? Является ли конструктор копирования по умолчанию достаточным для примера?
Посмотрите [* шаблон клона *] (https://katyscode.wordpress.com/2013/08/22/c-polymorphic-cloning-and-the-crtp-curiously-recurring-template-pattern/). – Quentin
«База» A = новая * База [2]; 'опечатка? Это не скомпилируется. На самом деле, весь ваш метод main() полон проблем. – mbgda
Я считаю, что полиморфные копии идиоматически реализованы с помощью метода под названием «Clone()» (вам нужно будет написать метод clone самостоятельно), и вы в основном пишете его так, как вы строите конструктор, но, как говорит @Quentin, найдите клон шаблон для специфики. – YoungJohn