版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 拷贝构造函数和赋值函数对象拷贝(复制)的必要class A /略略;void Function( A aA) /略略void main()() A a; Function(a);class A public: void g() const;A Function( ) A aA; return aA;void main() Function().g( );按传值方式传递对象按传值方式传递对象按传值方式返回对象按传值方式返回对象对象的拷贝(复制) 拷贝的特点 从无到有地创建一个新对象 不同于普通构造函数,参数必须且只需一个本类对象 就是一种特殊的构造 拷贝构造函数的调用 显式调用:A a1
2、; A a2(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
4、: B( ) pA = new A; B( ) 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 priva
5、te: My(const My& m); /没有类外实现没有类外实现 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); /
6、没有类外实现没有类外实现private: void f( ) My m1; My m2(m1); /链接错误链接错误 ;void main() My m1; My m2(m1);/链接错误链接错误对象的赋值 含义:根据已有的其它对象,修改当前对象。 比较复制(拷贝)与赋值 复制:从无到有新建一个 赋值:对象已存在,只是修改void main( ) A a1; A a2(a1); /拷贝拷贝 A a3=a2; /拷贝拷贝 a3 = a1; /赋值赋值默认的赋值函数 没有显式给出赋值函数时,由编译器提供 访问控制是public。 采用浅赋值 含义类似浅拷贝 对象成员的赋值 浅赋值的不足 赋值函数格
7、式: T& operator = (const T&); 默认的赋值函数 自定义的赋值函数浅赋值的不足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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会员制社交电商建立长期稳定的客户关系考核试卷
- 发动机的参数辨识和系统辨识方法考核试卷
- 创业空间的行业协会与交流平台考核试卷
- 电力设备的冷却与散热控制考核试卷
- DB11T 594.3-2013 地下管线非开挖铺设工程施工及验收技术规程 第3部分:夯管施工
- DB11∕T 1824-2021 森林消防综合应急救援队伍装备使用和维护规范
- can i课件教学课件
- 中位数课件教学课件
- 2024年高考语文二轮复习:信息类阅读综合测试(解析版)
- 节日课文课件教学课件
- 山东省日照地区2024-2025学年八年级上学期期中考试数学试题(含答案)
- 2024年资格考试-CPSM认证考试近5年真题附答案
- 混料机的安全操作规程有哪些(8篇)
- 期中 (试题) -2024-2025学年译林版(三起)英语六年级上册
- 期中测试卷-2024-2025学年统编版语文一年级上册
- 国家基本医疗保险、工伤保险和生育保险药品目录(2023年)
- 人教版一年级数学上册《第一、二单元测试卷》(附答案)
- 人教版二年级上册数学计算题400道
- 供应室教学课件
- 第三单元 测量(单元测试)-2024-2025学年三年级上册数学人教版
- 1输变电工程施工质量验收统一表式(线路工程)-2024年版
评论
0/150
提交评论