Как написать конструктор копирования, который копирует указатель на абстрактный класс? - PullRequest
0 голосов
/ 07 мая 2019

Мне нужно написать конструктор копирования класса Символ , который обладает атрибутом _weapon *, который является указателем наabstact class.
Персонаж получит производный класс asbtract Weapon класса (Rifle, Sword и т. д.).
Я не могу найти подходящийспособ скопировать атрибут _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.

...