gpt4 book ai didi

c++ - 从指向基类的指针调用派生类的复制构造?

转载 作者:行者123 更新时间:2023-11-30 01:48:17 24 4
gpt4 key购买 nike

我有

1- class A {int m;};
2- class B: public A
{float n;};
3- class C: public A
{string n;};

我将 A 类的所有实例存储在

vector <class A*> myInstansesofA;

它存储为一个指针,因为我根据一些 if 语句动态创建它们

if (some condition)
{
A* newA = new B();
myInstancesofA.push_back(newA );
}
else
{
A* newA = new C();
myInstancesofA.push_back(newA );
}

现在我需要创建 vector 的精确拷贝。使用新的指针集,但数据的精确拷贝。

问题在于将 A(实际上是 B 和 C)的每个实例的数据复制到新 vector 。

我尝试了以下但它不起作用。

for (vector<A*>::const_iterator it = myInstancesofA.begin(); it != myInstancesofA.end(); ++it)
{
A* newA = new A(*(*it));
myInstancesofA.push_back(newA );
}

我怀疑发生此错误是因为“new A”仅调用类型 A 的复制构造函数而未调用 B 或 C(我进行了调试并发现发生了这种情况)。

我该如何解决这个问题?

最佳答案

我相信您不能那样调用构造函数,并且在 C++ 中没有直接的方法来执行类似的操作(对于具有反射的语言,如 Java 和 C#,它非常简单)。

一种方法是使用 prototype pattern

class A {
public:
virtual A* clone() {
return new A {...};
}
};

class B : public A {
public:
A* clone() override {
return new B {.........};
}
};

class C : public A {
public:
A* clone() override {
return new C {.........};
}
};

对象本身负责创建自己的克隆。当然,还有很多东西需要改进设计,但至少它能让您体验到它的味道。

关于c++ - 从指向基类的指针调用派生类的复制构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564483/

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