如何编写将指针复制到抽象类的复制构造函数?

时间:2019-05-07 11:01:20

标签: copy-constructor c++98

我需要编写具有 _weapon *属性的 Character 类的副本构造函数指向摘要表类的指针。
角色将装备抽象的 武器 类的衍生类(步枪,剑,...等)。
我找不到将 _weapon *属性从一个实例复制到另一个实例的正确方法。

如果我仅将copy属性分配给instance属性,则两个Character都将具有指向同一对象的指针。
如果我尝试实例化一个新的 Weapon 类,由于 Weapon 是一个抽象类,编译器会对我大喊大叫。
可以实例化派生类并将复制对象的内容复制到前者吗?
什么是“正确”的解决方案?

class Weapon
{
    [...]
    virtual void function() = 0;
}

class Character
{
    [...]
private:
    Weapon *_weapon;
}

void Character(Character const &copy)
{
   [...]
   _weapon = copy._weapon //NOPE Both would point to the same object
   ***
   _weapon = new Weapon; //NOPE Weapon is an abstract class
   ***
   _weapon = new Rifle; //Rifle is a derived class of Weapon
   memcpy(copy._weapon, _weapon) //Is that possible memory speaking ? What if the copy was a sword ?
}

我知道这是一个相当“简单”的问题,我是C ++的新手,我无法解决它。
PS:它是C ++ 98,没有Boost,没有STL。

0 个答案:

没有答案