对象的拷贝

一.基于new函数的浅拷贝

二.基于copy函数的深拷贝

深拷贝的关键在于创建自己的copy函数实现层层嵌套下的拷贝。

如果只有一个简单的类,不包含任何其他类的引用,那么编写copy函数非常容易。

对于并非简单的类,包含对其他类的调用(句柄),那么需要在调用类添加copy函数,并且在本类copy函数中通过调用调用类copy函数来完成对调用类的句柄传递。

对于子类继承父类的深拷贝。

三.句柄的传递以及类型转换(包括动态转换$cast)

图四空白处需要填入的代码为

$cast(h, t);

在说明$cast的用法之前,我们先思考一个问题,子类句柄可以指向哪些对象?父类句柄可以指向哪些对象?

由于多态-virtual的存在,父类得以引用子类对象中的同名成员,该引用不能访问子类新增加的成员。

在工程中我们常常会遇到句柄类型向上转换(father_handle = child_handle)

当只有父类句柄指向的对象是真正的子类对象时,可以用cast使新的子类句柄指向该子类对象。

所以图四中添加了$cast(h, t);后,句柄 h将指向父类句柄 t所指向的 test_wr

注意,在本例中虽然 t定义为子类句柄,但在调用copy_data时形参为父类句柄,此时会进行隐式类型转化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值