现在的位置: 首页 > 综合 > 正文

类对象复制

2013年11月21日 ⁄ 综合 ⁄ 共 991字 ⁄ 字号 评论关闭

   若有如下代码:

AClass a;

AClass b=a;(或AClass b=AClass(a))

则将对象a复制给b,其复制的机制是将a的对象数据成员复制给b,在复制过程中使用了类的复制构造函数。如果在类定义中没指定则编译器为你生成一个默认的,但默认的在某些情况下存在问题(如指针成员)。

其输出结果将为:

a=20;b=30;

a=10;b=30;

可以发现

i.a = 10;
*(i.b) = 20;
AClass j = i;
*(i.b)=30;    //这里改变的同时也影响对象j的值
i.a = 20;      //这里改变的同时不会影响对象j的值

出现这个现象的原因是在对象复制时,默认的复制构造函数或赋值符号对指针的操作是复制指针,而不是复制值,在这种情况下我们便需自定义类的复制构造函数和赋值符号。

 

其输出结果将为:

a=20;b=30;

a=10;b=20;

可以看到两个对象之间不在相互影响了。

抱歉!评论已关闭.