我有一个类(我们称之为A),我想要复制A.所以我调用了A的复制构造函数。 A有一个B *类型的成员,它是一个B类指针给他的一个子类。(让我们用一个数字称它们为B.(即:B1,B5,..)) 由于我不想只复制地址,因此我从其中一个子类中调用了memberofA-> copyconstructor。基类中的复制构造函数是从子类的复制构造函数中调用的。但这是可能的还是我需要动态地将类型为baseclass的指针强制转换为指针所指向的正确子类?
class A {
public:
A(const A& object) {
// what should i call here to deep copy member
}
private:
B* member //pointer to subclass of B
};
class B {
privatedatamamber
public:
B (const B& object) {
privatedatamember = object->getprivatedatamember();
}
};
class B1 : public B {
privatedatamember
public:
B1 (const B1& object) : B(object) {
privatedatamember = object->getprivatedatamember();
}
};
答案 0 :(得分:4)
向B:
添加公共功能virtual B* Clone() = NULL;
B的子类必须实现这个(纯虚函数)。 这是一个例子:
B标题:
virtual B* Clone() = 0; //public
B1标题:
virtual B* Clone();
B1 cpp:
B* B1::Clone()
{
return new B1(*this);
}
A:
A::A(const A& object) : member(object.member->Clone()) {
}