编程论坛
注册
登录
编程论坛
→
C++教室
有谁能帮忙解释一下复制构造函数
陈子风
发布于 2008-05-25 21:44, 969 次点击
最近看到C++中关于复制构造函数的问题,就是看不太懂,哪位大哥能否帮我解释一下:
复制构造函数到底是干什么的,有什么用!
5 回复
#2
newyj
2008-05-25 22:20
就是把 同一个类声明的对象赋值给另一个对象
好象还有个 转类型的赋值构造函数 就是把一个类的对象 赋值给另一个 不同的类对象
#3
p1s
2008-05-25 22:32
我们在程序中常常需要把一些数据复制一份出来备作它用。对于只有基本类型变量的程序来说,这是轻而易举就能做到的——新建一个临时变量,用一句赋值语句就能完成。但如果它是一个有着许许多多成员数据的对象,这就会非常麻烦。最麻烦的是,那些成员数据还是私有的,根本无法直接访问或修改。那么这时候,我们怎么“克隆”出一个和原来对象相同的新对象呢?
根据程序运行的结果,我们发现输出链表b的内容的确和链表a一样了,并且可以得到三个结论:
(1)拷贝构造函数可以读出相同类对象的私有成员数据。
(2)拷贝构造函数的实质是把参数的成员数据一一复制到新的对象中。
(3)拷贝构造函数也是构造函数的一种重载。
构造函数有默认构造函数,其实拷贝构造函数也有默认的拷贝构造函数。所谓默认拷贝构造函数是指用户没有自己定义拷贝构造函数时,系统自动给出的一个拷贝构造函数。默认拷贝构造函数的功能是将对象的成员数据一一赋值给新创建对象的成员数据。如果某些成员数据本身就是对象,则自动调用它们的拷贝构造函数或默认拷贝构造函数。
程序15.4.1中的拷贝构造函数仅仅是把成员数据拷贝了过来,却没有把动态申请的资源复制,我们把这种拷贝称为浅拷贝。相对地,如果拷贝构造函数不仅把成员数据拷贝过来,连动态申请的资源也拷贝了,则称之为深拷贝。
以上摘自《易学C++》第15章,希望能对LZ有帮助。
#4
陈子风
2008-05-26 22:00
谢谢大家了 已经有点头绪了
#5
bibingyan
2008-05-26 22:56
很多时候复制构造函数需要用列表的形式实现。
#6
lucky_boy
2008-05-26 23:14
5楼说的没错
当对象中的指针成员用new申请的数组时,才更能显示其价值
1