Попробуйте это:
class Super
{
public:
Super();// regular ctor
Super(const Super& _rhs); // copy constructor
virtual Super* clone() const {return(new Super(*this));};
}; // eo class Super
class Special : public Super
{
public:
Special() : Super() {};
Special(const Special& _rhs) : Super(_rhs){};
virtual Special* clone() const {return(new Special(*this));};
}; // eo class Special
Обратите внимание, что мы реализовали функцию clone (), которую специальная (и любая другая производная от Super) переопределяет для создания правильной копии.
например:
Super* s = new Super();
Super* s2 = s->clone(); // copy of s
Special* a = new Special();
Special* b = a->clone(); // copy of a
РЕДАКТИРОВАТЬ: Как отметил другой комментатор, *this
, а не this
.Это научит меня быстро печатать.
РЕДАКТИРОВАТЬ 2: Еще одно исправление.
РЕДАКТИРОВАТЬ3: Я действительно не должен публиковать так быстро, когда в середине работы.Измененный тип возвращаемого значения Special :: clone () для ковариантных типов возвращаемого значения.