一道面试题,小弟我不懂,求大神解释

一道面试题,我不懂,求大神解释
#include<string.h>
#include <iostream>
using namespace std;

struct X{
private:
int len ;
char *ptr;
public:
int GetLen(){
  return len
 }
char *GetPtr(){
  return ptr;
}
X & Set(char *);
X & Cat(char *);
X & Copy(X&);//这种是什么函数啊???求详细解释
void Print();

};
X & X::Set(char *pc)
{
 len=strlen(pc);
 ptr= new char(len);
 strcpy(ptr,pc);
return *this;

}
X &X::Cat(char *);

  len+=strlen(pc);
  strcat(ptr ,pc);
  return *this;
}
X & X::Copy(X &x)
{
Set(x.GetPtr());
return *this;
}
void Print()
{
 cout<<ptr<<endl;
}
int main()
{
 X xobj1;
  xobj1.Set("abcd");
  .cat("efgh");
  xobj1.Print();
  X xobj2;
  xobj2.Copy(xobj1);
  .Cat("ijkl");
  xobj2.Print();
}
我已经有答案,但我看不懂这个程序啊!?求大神指点。。越详细越好

------解决方案--------------------
赋值拷贝 
C/C++ code
X & X::Copy(X &x)
{
Set(x.GetPtr());
return *this;
}

------解决方案--------------------
X & Set(char *);
&表示引用操作符。
------解决方案--------------------
X & Set(char *);
X & Cat(char *);
对于如上两个函数,参数类型为char* 代表字符串,返回值为X&,即返回的是一个对象,和 return *this对应。
这个在类的拷贝构造函数和赋值函数中都有应用。
X & Copy(X&);//这种是什么函数啊???求详细解释
参数类型和返回值都是类X的对象。
------解决方案--------------------
因为我没看下面COPY的定义部分,所以误认为是复制构造函数,但是这个COPY和真正意义上的复制构造函数又是何其的相似啊?
另外你这个程序,不知道是漏抄了点代码,还是本来代码就是这样啊?反正直接复制到编译器上运行出现了错误,下面是我给你改好的代码以及我把真正的带有复制构造函数的代码也写下来了。共计2段。
C/C++ code

//这个是改好能运行的代码。
#include<string.h>
#include <iostream>
using namespace std;

struct X{
private:
int len ;
char *ptr;
public:
int GetLen(){
  return len;
 }
char *GetPtr(){
  return ptr;
}
X & Set(char *);
X & Cat(char *);
X & Copy(X&);//这种是什么函数啊???求详细解释
void Print();
};
X & X::Set(char *pc)
{
    len=strlen(pc);
    ptr= new char(len);
    strcpy(ptr,pc);
    return *this;
    
}
X & X::Cat(char *pc)
{
  len+=strlen(pc);
  strcat(ptr,pc);
  return *this;
}
X & X::Copy(X &x)
{
    Set(x.GetPtr());
    return *this;
}
void X::Print()
{
    cout<<ptr<<endl;
}
int main()
{
    X xobj1;
    xobj1.Set("abcd");
    xobj1.Cat("efgh");
    xobj1.Print();
    X xobj2;
    xobj2.Copy(xobj1);
    xobj2.Cat("ijkl");
    xobj2.Print();
    return 0;
}

------解决方案--------------------
就是一个对象拷贝函数嘛。

X & Copy(X&);要是写成X(X&);才更加刺激一点,这样就变成了拷贝构造函数了。