В следующем фрагменте кода:
#include
using std::cout;
class Point
{
int x;
public:
Point(int x)
{
this->x = x;
}
Point(Point p)
{
x = p.x;
}
int getX() { return x; }
};
int main(int argc, char* argv[])
{
Point p1(10);
Point p2 = p1;
printf("%d", p2.getX());
return 0;
}
Компилятор выдает такую ошибку:
invalid constructor; you probably meant 'Point (const Point&)
Почему так происходит?
Ответ
В C++ конструктор копирования не может принимать копию объекта этого же класса, а вот по ссылке может (т.е. в вашем случае подойдет Point(Point& p), либо Point(const Point& p)).
Представим, что такое допустимо
Получается, что таким образом вы переопределяете конструктор копирования по умолчанию, тогда у компилятора не остается выбора (на самом деле просто запрещен такой вызов, но так звучит убедительнее) кроме как попытаться снова вызвать именно ваш конструктор копирования для передачи параметра в ваш же конструктор копирования и так далее (бесконечная рекурсия получается).
Комментариев нет:
Отправить комментарий