我想用c ++复制对象。问题是我已经派生出具有多态性的类,如下面的伪代码所示:
class BaseCl { some virtual functions };
class DerivedClass : public BaseCl { ... };
...
BaseCl * b1 = new DerivedClass();
BaseCl * b2 = new "copy of b1"; (just pseudocode)
问题是最后一行:
我想复制“BaseCl”类的对象,但由于多态性,副本必须与“DerivedClass”的原始对象一样。
最好的方法是什么?
非常感谢,任何帮助表示赞赏。
编辑:问题已经解决:
已插入:
virtual BaseCl *clone() = 0;
基类中的和
DerivedCl *clone() {return new DerivedCl(*this);}
在派生类中。谢谢大家。
答案 0 :(得分:6)
您需要在BaseC1中定义一个用于克隆的函数。类似的东西:
class BaseCl
{
virtual BaseCl* clone() {return new BaseC1(*this);}
};
class DerivedClass : public BaseCl
{
virtual BaseCl* clone() {return new DerivedClass(*this);}
};
答案 1 :(得分:0)
运行时多态性的关键是必须在大多数派生对象中实现操作,因为它不是知道执行它们所必须知道的所有操作。所有基础都必须公开由基指针调用的虚函数。
您可以在基础级别设置虚拟BaseCl* clone()
函数,并将派生类重写为return new DerivedClass(*this)