小白请问一下,程序最后输出的结果dx为什么是abcdef 30和dy=abcdefxyz 50?

#include
#include
using namespace std;

class cd

{

char *a;int b;

_ public:_

void init(char * aa,int bb)

{
a=new char[strlen(aa)+1];
strcpy(a,aa);
b=bb;
}

char *geta()
    {return a;}
int getb()
    {return b;}
void output(){cout<<a<<' '<<b<<endl;}

};

int main()

{

cd dx,dy;
char a[20];
dx.init("abcdef",30);
strcpy(a,dx.geta());
strcat(a,"xyz");
dy.init(a,dx.getb()+20);
dx.output();
dy.output();
return 0;

}

    dx.init("abcdef", 30); // dx={ a = "abcdef" b = 30 }
    strcpy(a, dx.geta());  // 拷贝字符串,结果 a="abcdef" 
    strcat(a, "xyz");      // 拼接字符串 a="abcdefxyz" 
    dy.init(a, dx.getb() + 20); //初始化 dy={a="abcdefxyz" b=50}
    dx.output();                //得到最终结果