- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第03章类和对象C课件
4. 拷贝构造函数(复制构造函数) (1)拷贝构造函数 拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它;其形参是本类对象的引用,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中 用户可以根据自己实际问题的需要定义特定的拷贝构造函数,以实现同类对象之间数据成员的传递。如果用户没有声明类的拷贝构造函数,系统就会自动生成一个缺省拷贝构造函数,这个缺省拷贝构造函数的功能是把初始对象的每个数据成员的值都复制到新建立的对象中。拷贝构造函数的声明形式为: 类名(类名 ); 或 类名(类名 对象名); 下面定义了一个cat类和cat类的拷贝构造函数: class cat { private: int age; float weight; char *color; public: cat(); cat(cat ); //拷贝构造函数的声明 void play(); void hunt(); }; cat::cat(cat other) { age = other.age; weight = other.weight; color = other.color; } ① 用类的一个对象去初始化另一个对象 第一种形式: cat cat1; cat cat2(cat1); //创建cat2时系统自动调用拷贝构造函数,用cat1初始化cat2 第二种形式: cat cat2=cat1; //注意并非cat cat1,cat2; cat2=cat1; ② 对象作为函数参数传递时,调用拷贝构造函数 f(cat a){ } //定义f函数,形参为cat类对象 cat b; //定义对象b f(b); //进行f函数调用时,系统自动调用拷贝构造函数 自动调用拷贝构造函数的三种情况 ③如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数 cat f() //定义f函数,函数的返回值为cat类的对象 { cat a; … … return a; } cat b; //定义对象b b=f(); //调用f函数,系统自动调用拷贝构造函数 自动调用拷贝构造函数的四种情况 (2)浅拷贝构造函数和深拷贝构造函数 图3.1 浅拷贝的两种情况 拷贝构造函数分为两种:浅拷贝构造函数和深拷贝构造函数。由C++提供的默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。如图3.1所示为浅拷贝的两种情况 (2)浅拷贝构造函数和深拷贝构造函数 一般情况下,只需使用系统提供的浅拷贝构造函数即可。但是如果对象的数据成员包括指向堆内存的指针,就不能使用这种拷贝方式,因为两个对象都拥有同一个资源;对象析构时,该资源将经历两次资源返还。此时必须自定义深拷贝构造函数,为创建的对象分配堆空间,否则会出现动态分配的指针变量悬空的情况。深拷贝构造函数需要同时复制对象空间和资源,如图3.2所示 图3.2 深拷贝构造函数 【例3.12】深拷贝构造函数 5. 数据成员的初始化 构造函数可以采用以下几种不同的形式对数据成员初始化: (1)在构造函数的函数体中进行初始化 (2)使用构造初始化表对数据成员进行初始化,格式为: 类名::构造函数(参数表): 变量1(初值1),…,变量n(初值n){…} 如: Circle::Circle(float r):radius(r){…} 成员初始化的次序取决于它们在类定义中的声明次序,与它们在构造初始化表中的次序无关。常量和引用的初始化必须放在构造函数正在建立数据成员结构的时候,也就是放在构造函数的冒号后面,如例3.13所示 (3)混合初始化,如: Student::Student(int n, int a, char* pname) :number(n), age(a) { strcpy(name, pname); } (4)使用拷贝构造函数进行初始化(如上所述) 6. 类类型和基本数据类型的转换 (1)构造函数用于类型转换 将构造函数用于类型转换,可以实现基本数据类型转换为类类型。利用构造函数进行类型转换,必须有一个前提,那就是此类一定要有一个只带一个参数的构造函数,这样才可以实现从参数类型向该类类型的转换,并且这种转换是隐式的。如:
您可能关注的文档
- 立井井筒掘砌工程开工验收检查记录.doc
- 立体停车场可行性研究报告.doc
- 窗二 三位数加减三位数(不进位、不退位)的估算.ppt
- 立体停车设备项目可行性研究报告(目录).doc
- 窗台上的男人.ppt
- 穿墙雷达捷克 ReTwis.doc
- 立体几何线面角.pptx
- 立德树人懂得感恩-.ppt
- 立足园本教研.ppt
- 立足文本特点,打造高效课堂.doc
- 2025中国冶金地质总局所属在京单位高校毕业生招聘23人笔试参考题库附带答案详解.doc
- 2025年01月中国人民大学文学院公开招聘1人笔试历年典型考题(历年真题考点)解题思路附带答案详解.doc
- 2024黑龙江省农业投资集团有限公司权属企业市场化选聘10人笔试参考题库附带答案详解.pdf
- 2025汇明光电秋招提前批开启笔试参考题库附带答案详解.pdf
- 2024中国能建葛洲坝集团审计部公开招聘1人笔试参考题库附带答案详解.pdf
- 2024吉林省水工局集团竞聘上岗7人笔试参考题库附带答案详解.pdf
- 2024首发(河北)物流有限公司公开招聘工作人员笔试参考题库附带答案详解.pdf
- 2023国家电投海南公司所属单位社会招聘笔试参考题库附带答案详解.pdf
- 2024湖南怀化会同县供水有限责任公司招聘9人笔试参考题库附带答案详解.pdf
- 2025上海烟草机械有限责任公司招聘22人笔试参考题库附带答案详解.pdf
文档评论(0)