将baseclasspointer的构造函数复制到子类

时间:2013-12-15 15:06:04

标签: c++ copy-constructor deep-copy

我有一个类(我们称之为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(); 
    }
  };

1 个答案:

答案 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()) {
}