C++ 复制具有多态性的对象

C++ Copying objects with polymorphism

本文关键字:对象 多态性 复制 C++      更新时间:2023-10-16

我想用 c++ 复制对象。问题是我派生了具有多态性的类,如下面的伪代码所示:

class BaseCl { some virtual functions };
class DerivedClass : public BaseCl { ... };

BaseCl * b1 = new DerivedClass();
BaseCl * b2 = new "copy of b1"; (just pseudocode)

问题是最后一行:

我想复制类"BaseCl"的对象,但由于多态性,副本必须与"DederdClass"的原始对象一样。

最好的方法是什么?

非常感谢,任何帮助都值得赞赏。

编辑:问题已解决:

插入:

virtual BaseCl *clone() = 0;

在基类中和

DerivedCl *clone() {return new DerivedCl(*this);}

在派生类中。谢谢大家。

您需要在 BaseC1 中定义一个创建克隆的函数。像这样:

class BaseCl
{
    virtual BaseCl* clone() {return new BaseC1(*this);}
};
class DerivedClass : public BaseCl
{
    virtual BaseCl* clone() {return new DerivedClass(*this);}
};

运行时多态性的关键是操作必须在最派生的对象中实现,因为它是知道执行它们所必须知道的一切的对象。所有基必须公开要由基指针调用的虚函数。

您可以在基本级别构建虚拟BaseCl* clone()函数,并将其重写为派生类以return new DerivedClass(*this)