- 10
- 0
- 约1.76万字
- 约 77页
- 2016-12-21 发布于重庆
- 举报
-*- 复制构造函数的形式 复制构造函数符合构造函数的形式 接收1个参数:同类对象的引用,为了防止对同类对象的修改,常声明为const引用 Tricycle( const Tricycle trike ); 通过传入的trike对象,创建和trike“相同”的新对象。 -*- 浅复制的问题 如果类中只包含简单数据成员,没有指向堆的指针,可以使用编译器提供的默认复制构造函数 如果类中包含指向堆中数据的指针,浅复制将出现严重问题 浅复制直接复制两个对象间的指针成员,导致两个指针指向堆中同一块内存区域 一个对象的修改将导致另一个对象的修改 一个对象超出作用域,将导致内存释放,使得另一个对象的指针无效,对其访问将导致程序异常。 -*- 编写自己的复制构造函数 含有指针成员的类,通常需要编写构造函数和复制构造函数,同时需要实现相应的复制构造函数,以及运算符重载(以后介绍) 实现“深复制”,创建对象备份时,为新对象在堆中分配自己的内存,并将现有值复制到新内存中。 -*- 【例7-15】含有指针成员的Tricycle类 class Tricycle { public: Tricycle(); Tricycle(const Tricycle rhs); ~Tricycle(); int getSpeed() const { return *speed; } void setSpeed(int newSpeed) { *speed = newSpeed; } void pedal(); void brake(); private: int *speed; }; speed所指内存在堆中分配 -*- 【例7-15】 Tricycle类 Tricycle::Tricycle() { speed = new int; *speed = 5; } Tricycle::Tricycle(const Tricycle rhs) { speed = new int; *speed = rhs.getSpeed(); //或:*speed = *rhs.speed; } Tricycle::~Tricycle() { delete speed; speed = NULL; } 构造函数中分配内存,析构函数中释 放内存。 默认复制构造函数中,不会分配内存 只是执行speed = rhs.speed。 -*- 【例7-15】 Tricycle类 void Tricycle::pedal() { setSpeed(getSpeed() + 1); //或(*speed) ++; std::cout “ Pedaling getSpeed() “\n; } void Tricycle::brake() { setSpeed(getSpeed() - 1); std::cout “ Pedaling getSpeed() “\n; } pedal中通过setSpeed设置新速度,也可以直接修改数据 *speed += 1,但通过调用setSpeed可以隐藏实现细节。 更进一步:setSpeed ( getSpeed()+1 ); 不用关心speed 到底是如何存储等实现细节。 -*- 【例7-15】测试Tricycle类 #include iostream int main() { Tricycle wichita; Tricycle dallas(wichita); wichita.setSpeed(10); std::coutWichita; wichita.pedal(); std::coutDallas; dallas.pedal(); std::coutWichita; wichita.brake(); std::coutDallas; dallas.brake(); return 0; } 复制构造后,新创建的dallas 和wichita的状态相同。 *speed都是5 复制构造后,两个对象是独立 的对象,可独立设置修改状态, 与引用关系不同。 -*- 本章内容安排 7.1 创建和使用指针变量 7.2 栈和堆(new与delete动态内存分配) 7.3 创建和使用引用 7.4 数据成员中的指针与引用 7.5 堆中创建、访问与删除对象 7.6 复制构造函数中的深拷贝与浅拷贝
您可能关注的文档
最近下载
- 2025年无人机驾驶员执照地面站存储空间与日志记录功能检查专题试卷及解析.pdf VIP
- 2025年全国广播电视播音员主持人资格考试大纲.pdf VIP
- 2025年特许金融分析师抵押贷款支持证券的监管科技应用专题试卷及解析.pdf VIP
- 2025年房地产经纪人房地产市场趋势预测与竞争前瞻分析专题试卷及解析.pdf VIP
- DEWALT得伟电动工具DCF805使用操作说明书手册.pdf VIP
- 河北公务员考试四级联考行测+申论真题及解析.docx VIP
- 北京市高考:2025年-2023年《生物》考试真题与参考答案.pdf
- 基于51单片机的教室灯光节能控制系统设计.docx VIP
- 急性肺栓塞诊治指南.pdf VIP
- 2025年招标师“公正原则”与招标采购质疑、投诉处理程序的正当性专题试卷及解析.pdf VIP
原创力文档

文档评论(0)