- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第三章 类和对象的进一步讨论
第三章 关于类和对象的进一步讨论 南京信息工程大学 赵丽玲 3.1构造函数3.1.1对象的初始化 类的数据成员是不能在声明类时初始化的,因为类是抽象的,不是具体的,没有分配存储空间,显然不能容纳数据 定义对象时初始化数据成员,仅限于所有的成员都是公有的 回顾例题2.3 可以使用成员函数对对象中的数据成员赋初值。 如果对于对象较多,数据成员较多的情况,用上面的定义方法,程序显得臃肿和繁锁。 C++提供了构造函数来处理对象的初始化问题。 构造函数是一种特殊的成员函数,不需要用户调用它,而是在建立对象时自动执行。 3.1.1对象的初始化 3.1.1对象的初始化 3.1.2构造函数的作用 70页: 是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态 在对象创建时由系统自动调用 构造函数的名字必须与类同名,不能由用户任意命名 如果程序中未声明,则系统自动产生出一个默认形式的构造函数 允许为内联函数、重载函数、带默认形参值的函数 3.1.2构造函数的作用 例3.1-1 注意: 在建立对象时自动执行构造函数,而不是在声名类时就直接对数据成员赋初值。 也可以在类内只对构造函数进行声明而在类外定义构造函数。例3.2-2 3.1.2构造函数的作用 说明: 在对象的生命周期开始的时候自动调用构造函数。 构造函数没有返回值,也不用声明任何类型。 构造函数不需要、也不能被用户调用。 构造函数中可以有其他与初始化无关的语句,但不提倡。 如果用户没有定义构造函数,系统也会自动生成一个构造函数,但是该函数没有参数,也不进行初始化工作。 3.1.2构造函数的作用 void Time() {…} t1.Time() 错误 3.1.3带参数的构造函数 如前所述,构造函数对各数据成员赋初值,使得该类的每一个对象都得到同一个初值。——不够灵活。 采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,实现不同的初始化。 3.1.3带参数的构造函数 3.1.3带参数的构造函数 例3.2 程序点评: 带参数的构造函数中的形参,其对应的实参在定义对象时给定。 用这种方法可以方便的实现对不同的对象进行不同的初始化。 3.1.4用参数初始化表对数据成员初始化 前述方法是在函数体内部对数据成员进行初始化,另一种方法是利用参数初始化表在函数的首部实现对数据成员的初始化。 一般形式: 3.1.5构造函数的重载 在一个类中可以定义多个构造函数,给对象提供不同的初始化方法,供用户选用。 这些构造函数具有相同的名字,而参数个数或参数类型不相同 3.1.5构造函数的重载 例3.3 程序点评: 两个构造函数同名,系统如何辨别?根据参数的个数和类型一一对应。 无参的构造函数属于默认构造函数。调用构造函数时,不必给出实参。一个类中只能有一个默认的构造函数。——为什么? 在建立对象时希望调用无参构造函数,要注意书写形式??? 记住:构造函数是不能被用户进行显示调用的! 类中虽然可以包含多个构造函数,但是对于每一个对象来说,建立对象是只能执行一个构造函数。 3.1.6带默认参数的构造函数 例:3.4 程序点评: 3.1.6带默认参数的构造函数 认真体会例题3.3和3.4的异同!!! 使用带默认参数的构造函数是方便有效的,它提供了建立对象时的多种选择,相当于好几个重载的构造函数。 要在声明构造函数时指定默认参数值,而不能只在定义构造函数时指定默认值 形参名可以省略, Box(int=10,int=10,int=10) 可以不使用参数而直接调用的构造函数包括???: 无参构造函数和默认参数构造函数,所以一个类中只能有一个不使用参数而可以直接调用的构造函数。 3.1.6带默认参数的构造函数 在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。 有以下声明语句: Box(int=10,int=10,int=10);//默认参数 Box(); //无参,重载 Box(int,int); //两个参数,重载 若有以下定义语句,该如何调用? Box box1; Box box2(15,30); 3.2析构函数 也是一个特殊的成员函数,它的作用与构造函数相反,其函数名必须与类名相同,且在函数名前必须加上“ ~”号。 对象生命期结束时执行析构函数 某函数中定义的自动局部对象,执行完毕后自动执行析构函数。 static局部对象,只在主函数结束或调用exit函数结束程序时才调用析构函数。 全局对象在离开其作用域时调用析构函数。 如果new运算符动态的建立了一个对象,当用delete运算符释放该对象时,先调用析构函
您可能关注的文档
最近下载
- 2024年铜陵职业技术学院单招职业技能测试题库及一套参考答案.docx VIP
- 规范文件GB∕T 35347-2017 机动车安全技术检测站.pdf
- 景区运营管理方案计划书.pdf
- 一种高效导热UV-LED油墨的制备方法及其应用.pdf VIP
- 坎德拉PV使用手册.PDF
- [中央]2024年国家医疗保障局医药价格和招标采购指导中心招聘应届生笔试典型考题与考点研判含答案详解.docx
- 坎德拉PVsyst使用指南(第四版2020年).pdf
- Unit 7 Art Lesson 1 Masterpieces课件 (共46张PPT)北师大版(2019)高中英语必修第三册1.pptx VIP
- 碳中和技术概论PPT完整全套教学课件.pptx
- 陕西齿轮变速箱使用维修手册2019-07-15.pdf VIP
文档评论(0)