- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 类和对象(下)
3.1 构造函数与析构函数 当声明一个类对象时,程序需要为对象分配存储空间,进行必要的初始化,这部分工作随着类的不同而不同。在C++中,由构造函数来完成这些工作。 构造函数是属于某一个类的,它可以由用户提供,也可以由系统自动生成。 与构造函数对应的是析构函数,当撤消类对象时,析构函数就回收存储空间,并做一些善后工作。析构函数也属于某一个类,它可以由用户提供,也可以由系统自动生成。 一、构造函数 构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。构造函数具有一些特殊的性质。 构造函数的名字必须与类名相同。 构造函数可以有任意类型的参数,但不能具有返回值。 定义对象时,编译系统会自动地调用构造函数。 例3.6 说明: 在实际应用中,通常需要给每个类定义构造函数。如果没有给类定义构造函数,则编译系统自动地生成一个缺省的构造函数。形如: complex::complex(){…} 构造函数不能像其它成员函数那样被显式地调用,它是在定义对象的同时调用的。 构造函数可以是不带参数的。例如 构造函数也可采用构造初始化表对简单的数据成员进行初始化,但对数组的初始化应在构造函数体中书写。 例如3.2 P72 对没有定义构造函数的类,其公有数据成员可以用初始化表进行初始化。例3.7 (和书73页有参数构造函数对比) 构造函数的重载 与一般的成员函数一样,C++允许重载构造函数,以适应不同的场合。这些构造函数之间以它们所带参数的个数或类型的不同来加以区分。例3.9 说明:在重载没有参数和缺省参数的构造函数时,有可能产生二义性。例如 使用默认参数的构造函数p75 对于带参数的构造函数,在定义对象时必须给构造函数传递参数,否则构造函数将不被执行。但在实际使用中,有些构造函数的参数值通常是不变的,只有在特殊情况下才需要改变它的参数值,这时可以将其定义成带缺省参数的构造函数。 例如 练习 (答案) 二、析构函数 析构函数也是一种特殊的成员函数.它执行与构造函数相反的操作,通常用于执行一些清理任务,如释放分配给对象的内存空间等。 析构函数有以下一些特点: 析构函数与构造函数名字相同,但它前面必须加一个波浪号(~); 析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数; 当撤消对象时,编译系统会自动地调用析构函数。 添加用户希望在最后一次使用对象之后所执行的操作 例3.5 说明: 每个类必须有一个析构函数。若没有显式地为一个类定义析构函数,编译系统会自动地生成一个缺省的析构函数。如: ~complex(){……} 对于大多数类而言,缺省的析构函数已经足够了。但是,如果在一个对象完成其操作之前需要做一些内部处理,则应该显式地定义析构函数,例如: class string_data{ private: char *str; publie: string_data(char *s) { str=new char[strlen(s)+1]; strcpy(str,s); } ~string_data() { delete str; } //… }; 同类对象的构造和析构的执行顺序 class XYZ{ …… }; void main() { XYZ A,B; …… } 示例3-8 3.2 对象数组与对象指针 一、对象数组 对象数组是指每一数组元素都是对象的数组,也就是说,若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。 对象数组由C++的系统缺省构造函数建立。 例3.12 #include iostream.h class exam{ int x; public: void set_x(int n){ x=n; } int get_x(){ return x;} }; void main() { exam ob[4]; int i; for(i=0;i4;i++) ob[i].set_x(i); for(i=0;i4;i++) coutob[i].get_x()‘ ‘; } 二、对象指针 在C语言中能够直接访问结构,或通过指向该结构的指针来访问结构。类似地,在C++语句中可以直接引用对象,也可以通过指向该对象的指针引用对象。对象指针是C++的重要特性之一。 一般情况下,用点运算符来引用对象成员,当用指向对象的指针来引用对象成员时,就要用“-”操作符。 如:op.setpoint(1,2);q-setpoin
您可能关注的文档
- 第2章2.1.2.ppt
- 第2章_4实验:验证力的平行四边形定则.ppt
- 第2章z变换与序列傅立叶变换.ppt
- 第2章2 Z域分析.ppt
- 第2章1解析函数.ppt
- 第2章_C语言快速入门-2.ppt
- 第2章-知识表示 丁世飞.ppt
- 第2章_二维图形绘制.ppt
- 第2章_博弈论简介.ppt
- 第2章__动量传递概论与动量传递微分方程.ppt
- 2025年半导体设备研发:技术路线选择与产业升级.docx
- 2025年医院信息化建设现状评估与智能化升级路径规划报告.docx
- 新零售2025年实体书店数字化门店顾客购买行为分析报告.docx
- 文化遗产数字化展示与传播策略在文化遗产数字化展示与传播技术应用与推广创新中的应用报告.docx
- 虚拟主播在直播电商中的转化率提升策略与品牌影响力分析.docx
- 2025年智慧城市配套:智能垃圾分类处理中心运营管理策略.docx
- 储能技术环境效益评估方法在新能源产业政策制定中的参考价值.docx
- 新零售背景下便利店绿色环保与可持续发展研究报告.docx
- 元宇宙技术在教育评估中的跨学科融合与创新能力培养报告.docx
- 智能家居生态构建创新路径与用户接受度实证研究白皮书.docx
文档评论(0)