将父类的子类的数据复制到具有相同父类的另一个类



这是一个使用谷歌找到的棘手答案,因为有许多类似的问题,但不同。

基本上这个想法是,我有ProjectAProjectB他们都继承ProjectBase。它们以不同的方式解析数据,但除此之外,每个人都有自己的成员,它们都更新了来自ProjectBase的成员。

因此,当我们projecta->Parse()时,我们想复制ProjectBase内容并在projectb->Build(). 此外,这些类还有更多的虚拟、独特和共享 ptr 成员。


class ProjectBase
{
protected:
int data;
public:
virtual void Parse() = 0;
virtual Zip Build() = 0;
}
class ProjectA : public ProjectBase
{
void Parse()
{
data = 2;
}

Zip Build()
{
}
}
class ProjectB : public ProjectBase
{
void Parse()
{
data = 3;
}
Zip Build()
{

}
}

// I need to copy the content of the ProjectBase (or here it will be int data) from projecta to projectb
std::unique_ptr<ProjectA> projecta = std::make_unique<ProjectA>();
projecta->Parse();
std::unique_ptr<ProjectB> projectb = std::make_unique<ProjectB>();
// ???
// I need to use the data = 2 inside projectb->Build()

这是对象切片实际上是您想要的情况之一。如果向上转换目标对象引用,则隐式ProjectBase复制赋值运算符将执行所需的操作。

static_cast<ProjectBase &>(*projectb) = *projecta;

这将将继承的数据成员从*projecta分配给*projectbProjectBase

最新更新