У меня есть потребность клонировать класс из экземпляра другого класса, чтобы клон наследовал характеристики исходного класса с определенными некоторыми новыми / измененными атрибутами, затем клонировал клон, клонировал клон и т. Д. Надеемся, что приведенный ниже код шоу хочу я хочу добиться. Я пробовал варианты нескольких ответов от stackoverflow относительно классов клонирования, но я не смог заставить его работать. Кто-нибудь может помочь?
Это (неполный) код:
#include <cstdio>
class BASE {
private:
int x = 1;
int y = 2;
int z = 3;
public:
void id() { printf("BASE\n"); }
void f1() { printf("BASE f1\n" }
void f2() { printf("BASE f2\n" }
void f3() { printf("BASE f3\n" }
void x() { printf("x = %d\n", x);
void y() { printf("y = %d\n", y);
void z() { printf("z = %d\n", z);
void x(int v) { x = v);
void y(int v) { y = v);
void z(int v) { z = v);
}
class A {
public:
void id() { printf("A\n"); }
void f1() { printf("A f1\n" }
void x() { printf("x = %d\n", x);
void y() { printf("y = %d\n", y);
void z() { printf("z = %d\n", z);
void x(int v) { x = v);
void y(int v) { y = v);
void z(int v) { z = v);
}
class B {
public:
void id() { printf("B\n"); }
void f1() { printf("B f1\n" }
void x() { printf("x = %d\n", x);
void y() { printf("y = %d\n", y);
void z() { printf("z = %d\n", z);
void x(int v) { x = v);
void y(int v) { y = v);
void z(int v) { z = v);
}
class C {
public:
void id() { printf("C\n"); }
void f1() { printf("C f1\n" }
void x() { printf("x = %d\n", x);
void y() { printf("y = %d\n", y);
void z() { printf("z = %d\n", z);
void x(int v) { x = v);
void y(int v) { y = v);
void z(int v) { z = v);
}
int main() {
BASE *ptr = new BASE();
ptr->id();
ptr->f1();
ptr->f2();
ptr->f3();
ptr->x();
ptr->y();
ptr->z();
printf("\n\n");
A *a = base->clone();
delete ptr;
A *ptr = a;
ptr->id();
ptr->f1();
ptr->f2();
ptr->f3();
ptr->x(7); // change member x to 7
ptr->x();
ptr->y();
ptr->z();
printf("\n\n");
B *b = a->clone();
delete ptr;
B *ptr = b;
ptr->id();
ptr->f1();
ptr->f2();
ptr->f3();
ptr->x();
ptr->y(9); // change member y to 9
ptr->y();
ptr->z();
printf("\n\n");
C *c = b->clone();
delete ptr;
C *ptr = c;
ptr->id();
ptr->f1();
ptr->f2();
ptr->f3();
ptr->x();
ptr->y();
ptr->z(5); // change member z to 5
ptr->z();
}
Код не завершен - в частности, функция "clone ()" не написана. Это бит, который я не знаю, как сделать.
При запуске программы должен появиться вывод:
BASE
BASE f1
BASE f2
BASE f3
x = 1
y = 2
z = 3
A
A f1
BASE f2
BASE f3
x = 7
y = 2
z = 3
B
B f1
BASE f2
BASE f3
x = 7
y = 9
z = 3
C
C f1
BASE f2
BASE f3
x = 7
y = 9
z = 5
Может ли это быть достигнуто? Если да, то как?