




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 拷贝构造函数和赋值函数对象拷贝(复制)的必要class A /略略;void Function( A aA) /略略void main()() A a; Function(a);class A public: void g();A Function( ) A aA; return aA;void main() Function().g( );按传值方式传递对象按传值方式传递对象按传值方式返回对象按传值方式返回对象对象的拷贝(复制) 拷贝的特点 从无到有地创建一个新对象 不同于普通构造函数,参数必须且只需一个本类对象 就是一种特殊的构造 拷贝构造函数的调用 显式调用:A a1; A a2
2、(a1); A a3=a1; 隐式调用:如上页 拷贝方式 位拷贝(浅拷贝、浅复制) 深拷贝(深复制)拷贝构造函数 含义:根据现有的对象,构造一个新的对象。 格式: T(const T&);class MyClass public: MyClass( int ); /自定义构造函数自定义构造函数 MyClass(const MyClass & obj) /自定义拷贝构造函数自定义拷贝构造函数 /略略 ;默认(缺省)的拷贝构造函数 默认的拷贝构造函数 没有显式提供拷贝构造函数时,由编译器提供 其访问控制是public的 拷贝方式是浅拷贝 位拷贝(浅拷贝、浅复制) 浅拷贝的本质 内置类型成员 指针成
3、员 引用成员 对象成员class AA /略略;class My public: My ( AA & a ) : mRefAA(a) private: int mVal; AA * mpAA; AA& mRefAA; AA mAA;自定义拷贝构造函数 自定义拷贝构造函数 基本同构造函数 访问控制、初始化列表 指明所有非静态数据成员如何拷贝 深拷贝(深复制) 按程序员的目的实现拷贝 深拷贝只能通过自定义拷贝构造函数实现 深拷贝的必要性浅拷贝的不足void main( ) B b1; B b2(b1);class A /略略;class B public: B( ) pA = new A; B(
4、) delete pA; private: A * pA; 深拷贝(例)class B public: B( ) pA = new A; B( ) delete pA; B(const B& b) A * pTemp = b.pA; pA= new A(*pTemp); /或合成一句或合成一句 pA= new A(*b.pA); /或使用初始化列表或使用初始化列表 B(const B& b):pA(new A(*b.pA) private: A * pA;防止对象按值传递 私有化拷贝构造函数 只声明,无定义class My private: My(const My& m); /没有类外实现没有
5、类外实现 void Wrong01(My m) /*略略*/ My Wrong02( ) /*略略*/ ;void Wrong03(My m) /*略略*/ My Wrong04( ) /*略略*/ class My private: My(const My& m) /*略略*/ private: void f( ) My m1; My m2(m1); /合法合法 ;void main() My m1; My m2(m1);/编译错误编译错误class My public: My(const My& m); /没有类外实现没有类外实现private: void f( ) My m1; My m
6、2(m1); /链接错误链接错误 ;void main() My m1; My m2(m1);/链接错误链接错误对象的赋值 含义:根据已有的其它对象,修改当前对象。 比较复制(拷贝)与赋值 复制:从无到有新建一个 赋值:对象已存在,只是修改void main( ) A a1; A a2(a1); /拷贝拷贝 A a3=a2; /拷贝拷贝 a3 = a1; /赋值赋值默认的赋值函数 没有显式给出赋值函数时,由编译器提供 访问控制是public。 采用浅赋值 含义类似浅拷贝 对象成员的赋值 浅赋值的不足 赋值函数格式: T& operator = (const T&); 默认的赋值函数 自定义的赋
7、值函数浅赋值的不足class A /略略;class B public: B( ) pA = new A; B( ) delete pA; private: A * pA;void main( ) B b1, b2; b1 = b2;自定义的赋值函数 格式: T& operator= ( const T & rhs ); 检查自我赋值 效率 a = a 的情况 返回 *this赋值函数中判断自我赋值class A /*略略 */ ;class B public: B( ) pA = new A; B( ) delete pA; B& operator=(const B& rhs) if (this
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60155:1993/AMD2:2006 FR-D Amendment 2 - Glow-starters for fluorescent lamps
- 来自大自然启示的故事寓言性质作文8篇范文
- 楼盘销售数据对比表
- 现代管理学理论与应用测试题
- 食品营养学与实践能力测试卷详解
- 疫情期间考试试题及答案
- 宜宾燃气考试试题及答案
- 仪器分析考试试题及答案
- 六一儿童摄影活动方案
- 六一古装活动方案
- 2025天猫服饰春夏趋势白皮书
- 2024年冬季N0M世界青少年数学思维研学活动模拟题
- 2024NEA水性气硅涂膏隔热保温墙体构造
- DB61T1536-2022工业锅炉运行管理规范
- SH/T 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范(正式版)
- JT∕T 795-2023 事故汽车修复技术规范
- 预防接种门诊验收表4-副本
- 外国文学之旅智慧树知到期末考试答案章节答案2024年山东师范大学
- 驾驶档案注销委托书
- 焊接规范的基本要求
- 广东省广州市2024届七年级生物第二学期期末教学质量检测模拟试题含解析
评论
0/150
提交评论