클래스에 포인터가있을 때 C++에서는 항상 copy constructor와 = 연산자가 오버라이드되어야한다고 들었습니다. 나는 그것에 대해 조사했고 포인터가 클래스 객체를 가리킬 때에 대한 설명을 발견하지 못했다. 클래스 생성자 및 = 연산자 오버라이드를 클래스 객체의 포인터로 정의하는 방법은 무엇입니까?
내 문제를 설명하기 위해 :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);
}
사실, 규칙은 복사 생성자, 할당 연산자 또는 소멸자가있을 때마다 3 개가 모두 필요할 것입니다. 이것은 일반적으로 "3 원칙"또는 "3 대 법칙"이라고 불립니다. – ildjarn