直接上有关问题

直接上问题
C/C++ code

test::test()
{
   cout<<"构造函数"<<endl;
}

test::~test()
{
    cout<<"析构函数"<<endl;

}

void test::show() const
{
    cout<<" x= "<<x<<endl;
    cout<<" y= "<<y<<endl;

}

void test::Create(int a, int b)
{
    x=a;
    y=b;
}




C/C++ code

int main(){
    test a;
    const test b=a;//这里不是复制了对象a吗?b不需要内存来装入a对象的数据?为什么在这不调用构造函数呢?
    a.Create(4,5);
    a.show();
    b.show();//怎么这里调用show的方法却显示的x,y为乱码(也就是随即值)?
    return 0;
}
//这里为什么只要一次构造而需要二次析构呢?不明白,忘大家指点一下。



------解决方案--------------------
const test b=a;//这里调用的是拷贝构造函数,没写编译器会生成个缺省的
b.show();//没有调用b.Create来给x,y来赋值

------解决方案--------------------
写个拷贝构造函数
------解决方案--------------------
C/C++ code

int main(){
    test a;
    const test b=a;//由于你没实现拷贝构造函数,会调用默认拷贝构造。
    a.Create(4,5);
    a.show();
    b.show();//b是a的拷贝,b中的x,y 没初始化。
    return 0;
}
//一次构造的是test a产生,两次析构是return的时候,分别析构a,和b。

------解决方案--------------------
const test b = a 此时等价 const test b(a); 调用缺省的拷贝构造函数来初始化。
为防隐式调用 用explicit关键字;
由于b是a拷贝来的副本,而初始化时x,y未获得初值,所以你懂得...