- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 关于类和对象的进一步讨论 9.1 构造函数 9.2 析构函数 9.3 调用构造函数和析构函数的顺序 9.4 对象数组 9.5 对象指针 9.6 共用数据的保护 9.7 对象的动态建立和释放 9.8 对象的赋值和复制 9.9 静态成员 9.10 友元 9.11 类模板 9.1 构造函数 9.1.1 对象的初始化 注意: 类的数据成员是不能在声明类时初始化。 类的公用成员可以在定义对象时对数据成员进行初始化。在一个花括号内顺序列出各公用数据成员的值,两个值之间用逗号分隔。 如果数据成员是私有的,或者类中有private或protected的成员,就不能用这种方法初始化。 9.1.2 构造函数的作用 解决对象中私有成员的初始化问题。 只要创建一个对象,必将调用构造函数。 构造函数的名字必须与类名同名,不返回任何值。 构造函数功能由用户定义,可根据初始化的要求设计函数体和函数参数。 关于构造函数的说明: (1) 定义对象时,自动调用构造函数。 (2) 构造函数没有返回值,不需在定义构造函数时声明类型。 (3) 构造函数不能被用户调用。 (4) 在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句。 (5) 如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。 9.1.3 带参数的构造函数 在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。 构造函数首部的一般格式为: 构造函数名(类型 1 形参1, 类型2 形参2, …) 定义对象的一般格式为: 类名 对象名(实参1, 实参2, …); 例9.2 有两个长方柱,其长、宽、高分别为: (1)12,20,25;(2)10,14,20。求它们的体积。编一个基于对象的程序,在类中用带参数的构造函数对对象初始化。 9.1.4 用参数初始化表对数据成员初始化 在构造函数首部实现数据成员初始化,而不在构造函数体内实现。 例9.2中定义构造函数可以改用以下形式: Box::Box(int l,int w,int h): length(l) ,height(h) ,width(w){ } 这种写法方便、简练,尤其当需要初始化的数据成员较多时更显其优越性。 9.1.5 构造函数的重载 在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的方法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。这称为构造函数的重载。 说明: 无参的构造函数属于默认构造函数。一个类只能有一个默认构造函数。 定义对象时采用无参数构造函数,应写成 Box box1; 不能写成 Box box1( ); (3) 尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。 9.1.6 使用默认参数的构造函数 构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。 例9.4 将例9.3程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。 说明: (1) 应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值,默认值不能重复指定。 (2) 声明构造函数时,形参名可以省略。 Box(int =10,int =10,int =10); (3) 在一个类中定义默认参数的构造函数和重载构造函数时,要避免二意性。 构造函数和普通成员函数的区别: 定义一个对象时(从无到有),系统自动调用构造函数,不由用户调用。 存在一个对象后,用户方可调用该对象的普通成员函数。 9.8 对象的赋值和复制 9.8.1 对象的赋值 对象之间的赋值也是通过赋值运算符“=”进行的。 其功能是将一个对象的成员值一一复制给另一对象的对应成员。 格式为: 对象名1 = 对象名2; 注意:对象名1和对象名2必须属于同一个类。 例如 Student stud1, stud2; //定义两个同类的对象 ┆ stud2 = stud1; //将stud1赋给stud2 说明: (1) 对象的赋值只对其中的数据成员赋值,而不对成员函数赋值。 (2) 类的数据成员中不能包括动态分配的数据,否则在赋值时可能出现严重后果。 9.8.2 对象的复制(复制构造函数或拷贝构造函数) 用一个已有的对象复制出一个完全相同的新对象。 如: Box box2(box1); 作用:用已有的对象box1克隆出一个新对象box2。 一般形式为: 类名
您可能关注的文档
- 堆栈,队列操作上级实验.doc
- Visual FoxPro程序设计 第8篇.pdf
- C程序设计_各篇重点知识.doc
- Java Web程序设计教程 范立峰第4篇习题答案.pdf
- Ksoap使用详解.doc
- 访谈会话中话轮把持的语言标记和其语境顺应性.pdf
- 40例X连锁肾上腺脑白质营养不良患者的基因型及表型_英文_.pdf
- 锅炉用钢管及钢材料标准及安全.pdf
- 设计一个按优先数调度算法实现处理器调度程序.doc
- 管理者的语言表达与沟通艺术.pdf
- 宠物经济2025:智能健康监测设备研发与市场推广策略优化.docx
- 宠物经济2025:智能健康监测设备行业发展趋势与市场拓展报告.docx
- 宠物经济2025:智能健康监测设备行业发展趋势与市场拓展趋势研究报告.docx
- 2023年广东珠海醋酸纤维有限公司招聘3人笔试参考题库附带答案详解.doc
- 宠物经济崛起,2025年宠物行为训练服务市场前景预测报告.docx
- 宠物经济市场2025年战略研究报告:宠物犬行为训练服务市场布局策略.docx
- 宠物行业市场规模2025:中国宠物行业市场规模与宠物行业投资前景报告.docx
- 宠物行业2025:宠物行为训练服务市场技术进步与应用前景研究.docx
- 课程资源的多媒体化与学生自主学习论文.docx
- 媒体融合背景下,2025年内容产业创新策略解析.docx
文档评论(0)