gpt4 book ai didi

c++ - 具有类型转换的多态复制构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:01 24 4
gpt4 key购买 nike

我需要复制构造一个对象,同时将其类型更改为另一个类,该类是同一类层次结构的成员。我读过有关多态复制构造函数的文章,并且(希望)理解其背后的思想。然而,我仍然不知道这种模式是否适用于我的案例,如果适用,如何实现它。我认为最好在示例中展示我需要的内容。

有一个 Base 类和两个子类,Child1Child2。我需要基于 Child1 创建一个 Child2 类型的对象,即。最重要的是,我需要将 p_int 指向的对象从 Child1 复制到 Child2。我写了一个简单的程序来说明它:

#include <iostream>
using namespace std;

class Base {
public:
Base() { p_int = new int; *p_int = 0; }
~Base() { delete p_int; }
virtual Base* clone() const = 0;

void setpInt(int val) { *p_int = val; }
void setInt(int val) { a = val; }
virtual void print() {
cout << "Base: ";
cout << (long)p_int << ":" << *p_int << " " << a << endl;
}
protected:
int* p_int;
int a;
};

class Child1 : public Base {
public:
Child1() {};
Child1(const Child1& child) {
p_int = new int (*child.p_int);
a = child.a + 1;
}

Base* clone() const { return new Child1(*this); }

void print() {
cout << "Child1: ";
cout << (long)p_int << ":" << *p_int << " " << a << endl;
}
};

class Child2 : public Base {
public:
Child2() {};
Child2(const Child2& child) {
p_int = new int (*child.p_int);
a = child.a + 1;
}

Base* clone() const { return new Child2(*this); }

void print() {
cout << "Child2: ";
cout << (long)p_int << ":" << *p_int << " " << a << endl;
}
};

int main() {
Child1* c1 = new Child1();
Child2* c2;

c1->setpInt(4);
c1->print();

c2 = (Child2*)c1->clone();
c2->print();
}

不幸的是,结果如下,即。没有类型转换:

Child1: 162611224:4 0
Child1: 162611272:4 1

我究竟需要实现什么才能实现我的需求?我开始认为我需要实现一种类型转换机制而不是多态复制构造函数,但我已经感到困惑了。

编辑:要求跟进here

最佳答案

最简单的解决方案可能是实现一个Child2 构造函数,将Child1& 作为参数。然后你可以简单地调用:

Child2* c2 = new Child2(*c1);

关于c++ - 具有类型转换的多态复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com