- 1、本文档共86页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《皮德常C程序设计教程》Chapter-9分析
第 9 章 类的高级部分 皮德常 南京航空航天大学 计算机科学与技术学院 主要内容 9.1 静态成员 例:一个学生类,定义其对象张三、李四,他们分别维护着类成员的一份副本(学号、姓名、籍贯等)。 如果要统计一个班学生总数? 用类外的变量记录,违背了数据封装。 用类的一个数据成员记录,导致多个副本,不仅冗余,而且势必造成数据不一致。 9.1.1 静态数据成员 1. 用关键字static声明; 2. 同一个类中的所有对象都共享该变量; 3. 必须在类外定义和初始化,用(::)来指明所属的类。 4. 静态变量不依赖于对象而存在,无论是否定义该类的对象,这种类型的变量都存在。静态数据成员实际上是在类外定义的一个变量,它的生存期和整个程序的生存期一样,在定义对象之前,静态数据成员就已经存在。 9.1.2 静态函数成员 静态函数成员是类中的一个函数,有static修饰。 静态函数成员和静态数据成员类似,在对象生成之前也已经存在。这就是说在对象产生之前,静态的函数成员就能访问其它静态成员。 类外代码可以使用类名和作用域操作符来调用静态成员函数。 静态成员函数只能引用属于该类的静态数据成员或静态成员函数。见例【例9-2】。 9.2 友元函数 引入友元的原因? 1. 友元函数不是类中的函数成员,但它和类的函数成员一样,可以访问类中定义的私有成员。 2. 友元函数可以是一个外部函数,也可以是另外一个类的函数成员。 3. 将某个函数声明为一个类的友元方式,前面加friend 。 9.2.3 一个类作为另外一个类的友元 若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。 9.3 对象赋值问题 采用赋值运算符“=”可以将一个对象赋值给另外一个对象,或者采用一个对象初始化另外一个对象。在缺省情况下,这两个操作执行的是对象成员之间的拷贝,也称为按位拷贝或浅拷贝。 【例9-5】浅拷贝应用举例。 . 9.3 对象赋值问题(continued) 当采用一个对象初始化另一个对象时,对象成员之间的赋值也是按位拷贝。 赋值和初始化的区别:赋值出现在两个对象都已经存在的情况下,而初始化出现在创建对象时,例如: Rectangle box1; box1. setData(100, 50); Rectangle box2 = box1; // initialization 9.4 拷贝构造函数 拷贝构造函数是一个特殊的构造函数,当定义一个对象并采用同类型的另外一个对象初始化时,将自动调用拷贝构造函数。 通常,采用缺省的按位拷贝操作也能正确地实现赋值,但在某些情况下不能正确执行。 Example: 进一步演化:Using const Parameters 9.4.1 缺省的拷贝构造函数 如果一个类没有定义拷贝构造函数,C++将为其创建一个缺省的拷贝构造函数。 缺省的拷贝构造函数的功能就是按位赋值。 9.4.4 编译器的一个纰漏 9.4.4 编译器的一个纰漏 9.5 运算符重载 Example 1: The / operator can perform two types of division: floating point and integer. Example 2: Date today( 2011 , 4 , 28 ); today.add (5 ); today += 5; // ??? 9.5.1 重载赋值运算符 如果对象中有指针成员,采用拷贝构造函数能解决对象初始化问题,但并不能处理对象赋值。 Example: operator= 函数的参数不一定是常引用,上述声明优点 : (1) 效率高。采用引用可以防止参数传递时生成对象拷贝,节省了对象初始化和析构的过程。 (2) 将参数声明为常引用,可以防止函数无意间修改对象right的内容。 (3) 符合赋值运算的常识。 函数调用: p2.operator = (p1); ? p2 = p1; p3 = p2 = p1; // ??? 9.5.2 this指针 this是一个隐含的内嵌指针,它指向调用成员函数的当前对象。 Example: cout person1.getName( ) endl; cout person2.getName( ) endl; 9.5.3 重载双目算术运算符 引入原因: Feetinches length1(3,5), length2(6,3), length3; length3 = length1 + lengt
您可能关注的文档
- 《理论力学》合成运动习题解分析.doc
- 《琵琶行》分析.ppt
- 《生命安全与救援》期末考试及答案最新最全分析.doc
- 《生活与哲学》第二单元—认识论(第六课)分析.ppt
- 《生物化学》精要速览分析.doc
- 《瑞雪图》第二课时PPT分析.ppt
- 《瑞雪图》第二课时课件分析.ppt
- 《珍爱生命远离火灾》课件分析.ppt
- 《用电监察(检查)员》高级工理论试卷分析.doc
- 《瑞雪图》课件分析.ppt
- 《GB/T 32879-2025电动汽车更换用电池箱连接器》.pdf
- 中国国家标准 GB/T 21649.2-2025粒度分析 图像分析法 第2部分: 动态图像分析法.pdf
- 中国国家标准 GB/T 20899.9-2025金矿石化学分析方法 第9部分:碳量的测定.pdf
- 《GB/T 20899.9-2025金矿石化学分析方法 第9部分:碳量的测定》.pdf
- GB/T 20899.9-2025金矿石化学分析方法 第9部分:碳量的测定.pdf
- 《GB/T 33820-2025金属材料 延性试验 多孔状和蜂窝状金属高速压缩试验方法》.pdf
- GB/T 33820-2025金属材料 延性试验 多孔状和蜂窝状金属高速压缩试验方法.pdf
- 中国国家标准 GB/T 33820-2025金属材料 延性试验 多孔状和蜂窝状金属高速压缩试验方法.pdf
- GB/T 45910-2025信息技术 生物特征识别模板保护方案的性能测试.pdf
- 《GB/T 45910-2025信息技术 生物特征识别模板保护方案的性能测试》.pdf
最近下载
- 《成人住院患者静脉血栓栓塞症的预防护理2023版团体标准》解读.pptx
- 开题报告医学PPT模板.pptx VIP
- 2011中考英语作文指导及范文.doc VIP
- 高考英语总复习-第二部分-语法填空专项突破-专题二-无提示词填空-第六讲-并列句和状语从句-市赛课公.pptx VIP
- 工会招聘考试试题及答案.doc VIP
- 河北省中考英语复习指导课件.pptx VIP
- 供应商评级管理办法.docx VIP
- 2025年人教版高一下学期期末考试数学试题与答案解析(共五套) .pdf VIP
- 2025年河北沧州渤海新区黄骅市事业单位公开招聘工作人员130名笔试备考试题及答案解析.docx VIP
- 党纪党规知识测试题及答案_党规知识测试题及答案.doc VIP
文档评论(0)