Ваша проблема в этой строке:
*this = Player(rhs);
Это снова вызывает перегруженный метод =, что приводит к рекурсивному циклу.Вы должны назначить все члены по отдельности:
x = rhs.x;
y = rhs.y; // for example
EDIT Также обратите внимание, что поскольку объект, который вы передаете, относится к тому же типу объекта, к которому принадлежит метод экземпляра, вы можете получить доступ к закрытым членамкак обычно для публичных членов.
EDIT2 Насколько я знаю, вы бы не хотели бы копировать ссылку, потому что это означает, что тот же объект Bank будетбыть доступным из обоих объектов, что нарушает инкапсуляцию и может вызвать некоторые непреднамеренные проблемы.Есть ли какая-то конкретная причина, по которой вы не используете указатели?Если бы объект банка был указателем, вы могли бы перегрузить оператор = для банка, а затем назначить его обычным образом:
bank = rhs.bank;
Что касается разницы конструкторов копирования и операторов назначения, то появился быстрый поиск в Googleэта ссылка: http://prashanth -cpp.blogspot.com / 2007/01 / assignment-operator-vs-copy-constructor.html