我四处搜索,似乎为了执行此操作,我需要更改我的基类,并想知道这是否是最好的方法。
例如,
我有一个基类:
class Base {}
然后是一长串派生类:
class Derived_1:: public Base {}
class Derived_2:: public Derived_1{}
...
...
class Derived_n:: public Derived_M{}
然后我还有另一堂课:
class DeepCopy
{
Base * basePtr;
public:
DeepCopy(DeepCopy & dc) {}
}
假设 Base 类和 Derived_x 类复制构造函数已正确编码,那么为 DeepCopy 编写复制构造函数的最佳方法是什么。我们如何知道我们要复制的对象的 basePtr 中的类?
我能想到的唯一方法是使用 RTTI,但使用一长串的dynamic_casts似乎不正确。此外,它还需要 DeepCopy 了解 Base 类的继承层次结构。
我看到的另一种方法是here https://stackoverflow.com/questions/5027456/copying-derived-entities-using-only-base-class-pointers-without-exhaustive-tes。但它要求基类和派生类实现克隆方法。
那么有没有一种更简单、标准的方法来做到这一点呢?
您需要使用虚拟副本模式:在接口中提供一个虚函数来执行复制,然后跨层次结构实现它:
struct base {
virtual ~base() {} // Remember to provide a virtual destructor
virtual base* clone() const = 0;
};
struct derived : base {
virtual derived* clone() const {
return new derived(*this);
}
};
然后DeepCopy
对象只需要调用该函数:
class DeepCopy
{
Base * basePtr;
public:
DeepCopy(DeepCopy const & dc) // This should be `const`
: basePtr( dc.basePtr->clone() )
{}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)