- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC第十章
10.1 构造函数 10.1.1 构造函数的定义 构造函数(constructor)是一种特殊的函数,其作用是在创建对象时,由系统来调用,对新建对象的状态进行初始化。 构造函数的特殊性有以下几点: (1)构造函数的名字必须与类名相同。 (2)构造函数不指定返回值类型。 (3)构造函数可以无参,也可有多个形参,因此一个类中可以重载定义多个构造函数。 (4)创建一个对象时,系统会根据实参来自动调用某个构造函数。 创建对象至少包括以下三种情形: 说明一个对象变量或数组,也包括函数形参对象。 使用new运算符动态创建对象。 创建临时匿名对象。 构造函数一般是公有的,使类外程序能按形参要求来创建对象。在特定情况下,构造函数也可能作为私有,以限制外部程序随意创建对象。 例10-1 对Date类添加构造函数 类Date中重载定义了两个构造函数。注意构造函数的名字就是类的名字Date,而且构造函数没有返回值,也不能指定为void。构造函数的形参也可取缺省值。 A行创建了2个对象date1和date2,由系统自动调用构造函数。在创建对象date1时,调用了第1个构造函数,有3个形参。在创建对象date2时,调用了第2个构造函数,无参构造函数。 构造函数也可以在类体中说明,在类外定义。 构造函数的好处是明确规范了类的使用者如何来创建对象,要求提供什么实参来初始化新建对象的状态,从而简化了类的使用。 10.1.2 缺省构造函数 每个类都要有构造函数。如果一个类中没有显式定义任何构造函数,那么编译器将自动生成一个无参的公有的构造函数,该构造函数就是一个缺省构造函数(default constructor)。自动生成的缺省构造函数的函数体是空的。 前面介绍的类中没有定义构造函数而能创建对象,就是因为调用了自动生成的缺省构造函数。如果类中显式定义了一个构造函数,那么系统就不会再自动生成缺省构造函数。 也可以在类中显式定义一个缺省构造函数。如果一个构造函数没有任何形参,或者所有形参都有缺省值,它也是一个缺省构造函数。 缺省构造函数的好处是简化了类的实例化过程,不需要提供任何实参就能创建对象。缺省提供的构造函数不做任何初始化,因此所有数据成员的值都可能是随机值。因此类的设计往往要求显式定义缺省构造函数。 一个类最多只能有一个缺省构造函数。 一个类中也可以没有缺省构造函数。 一般情况下,构造函数都是公有的,但特殊情况下,保护的或者私有的构造函数也是有用的。此时类外程序就不能直接创建该类的对象,该类往往要提供一个静态函数来创建对象并返回对象的指针,使类外程序能通过该指针来操作对象。此时往往要对创建对象的条件进行某些限制。 10.2 析构函数 析构函数(destructor)与构造函数的作用正相反,它用来完成对象被撤销前的扫尾清理工作。析构函数是在撤消对象前由系统自动调用的,析构函数执行后,系统回收该对象的存储空间,该对象的生命周期也就结束了。 析构函数是类中的一种特殊的函数,它具有以下特性: (1)析构函数名是在类名前加“~”构成。 (2)不指定返回类型。 (3)析构函数没有形参,因此也不能被重载定义,即一个类只能有一个析构函数。 (4)在撤销一个对象时,系统将自动调用析构函数,该对象作为析构函数的当前对象。 (5)如果没有显式定义析构函数,编译器将生成一个公有的析构函数,称其为缺省析构函数,函数体为空。 当撤销一个对象时,该对象的类的析构函数将自动执行,而且该对象作为析构函数的当前对象。在以下三种情况下要调用析构函数: 当程序执行离开局部对象所在的作用域时,要撤销局部对象。当程序终止时,要撤销全局对象和静态对象。 用delete运算符回收先前用new创建的对象。 临时匿名对象使用完毕。 例10-2 修改前面Date类,添加析构函数,并对构造函数和析构函数的执行都加以提示。 何时需要自行定义析构函数?如果类的数据成员中含有指针,而且在构造函数中用new来动态申请内存,此时就需要自行定义析构函数,用delete来动态回收内存。实际上,此时也要求自行定义拷贝构造函数和赋值操作函数。 一般情况下,析构函数都是公有的,但在特殊情况下,可能定义私有的析构函数,这样就能阻止创建局部对象和delete命令的编译。可以通过该类的静态成员函数来撤销对象,此时往往要对某些条件进行判断来限制是否要撤销对象。 10.3 拷贝构造函数与单参构造函数 一个类不仅自动生成缺省构造函数,还会生成拷贝构造函数和赋值操作函数。单参构造函数具有隐式类型转换的作用。 10.3.1 拷贝构造函数 创建一个对象有两种来源:从类中创建,从一个已有的同类对象复制。 拷贝构造函数(copy constructor)是一种特殊的构造函数
您可能关注的文档
最近下载
- Unit 4 School Life第13课时 课件-中职英语高教版(2021)基础模块1(含音频+视频).pptx VIP
- 临床植入式心律转复除颤器(ICD)患者护理查房.pptx VIP
- 呼吸困难的临床诊治.pptx VIP
- [班主任如何做好“引路人”.doc VIP
- 小学四年级上册信息技术教本.docx VIP
- Unit 4 School Life 第15课时 课件-中职英语高教版(2021)基础模块1(含音频+视频).pptx VIP
- 腹膜透析标准操作规程.ppt VIP
- 第五版最新版FMEA 失效模式及影响分析.pptx VIP
- 人教版小学四年级数学上册综合测试一.pdf VIP
- 超星尔雅学习通《高校实验室安全基础(华东理工大学)》章节测试含答案 .pdf
文档评论(0)