Я слышал, что когда в классе есть указатель, всегда должен быть конструктор копирования и переопределение оператора = в C ++. Я искал об этом и не нашел объяснения о том, когда указатель указывает на объект класса.
Чтобы проиллюстрировать мою проблему:
class Figure
{
Figure();
Figure(const Figure& figure)
Figure(float density);
~Figure();
virtual float volume()=0;
Figure *next;
protected:
float density;
};
class Sphere: public Figure
{
Sphere();
Sphere(float r);
Sphere(float r, float density);
~Sphere();
float volume();
private:
float r;
};
Я попытался сделать конструктор копирования для класса Figure. В последней строке я получаю сообщение об ошибке «объект типа абстрактного класса Рисунок запрещен». Я не знаю, что я делаю не так. И я не знаю, как сделать переопределение оператора присваивания.
Figure::Figure(const Figure& figure)
{
this->tip = figure.tip;
this->density = figure.density;
if (figure.next)
next = new Figure(*figure.next);
}