其他分享
首页 > 其他分享> > c – 我可以将指针传递给超类,但是可以创建一个子类的副本吗?

c – 我可以将指针传递给超类,但是可以创建一个子类的副本吗?

作者:互联网

我有一个函数,它获取指向超类的指针并对其执行操作.但是,在某些时候,该函数必须对输入的对象进行深度复制.有什么方法可以执行这样的副本吗?

在我看来,让函数成为模板函数,只是让用户传递类型,但我希望C提供更优雅的解决方案.

解决方法:

SpaceCowboy提出了惯用的克隆方法,但忽略了3个关键细节:

class Super
{
public:
  virtual Super* clone() const { return new Super(*this); }
};

class Child: public Super
{
public:
  virtual Child* clone() const { return new Child(*this); }
};

> clone是一个const方法
> clone返回指向当前类的指针,而不是基类
> clone返回当前对象的副本

第二个是非常重要的,因为它允许使用有时候你有更多类型信息而不仅仅是Super *这一事实.

此外,我通常更喜欢克隆来提供副本,而不仅仅是相同类型的新对象.否则,您使用Exemplar模式来构建新对象,但是您没有正确克隆,并且名称具有误导性.

标签:c,polymorphism,copy-constructor
来源: https://codeday.me/bug/20191002/1841278.html