直接上有关问题
直接上问题
------解决方案--------------------
const test b=a;//这里调用的是拷贝构造函数,没写编译器会生成个缺省的
b.show();//没有调用b.Create来给x,y来赋值
------解决方案--------------------
写个拷贝构造函数
------解决方案--------------------
- 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未获得初值,所以你懂得...