- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第09章类域友元运算符重载.ppt
第9章 类域、友元、运算符重载 第8章中介绍了C++中面向对象编程的基本概念,讨论了类的定义、实现以及对象的创建和组织,特殊数据成员和函数成员的用法等,本章将在前文介绍的基础上,探讨关于对象的一些深层次内容。 9.1 类作用域 作用域可分为类作用域、类名的作用域以及对象的作用域几部分内容。 在类中定义的成员变量和成员函数的作用域是整个类,这些名称只有在类中(包含类的定义部分和类外函数实现部分)是可见的,在类外是不可见的,因此,可以在不同类中使用相同的成员名。另外,类作用域意味着不能从外部直接访问类的任何成员,即使该成员的访问权限是public,也要通过对象名来调用,对于static成员,要指定类名来调用。 如果发生“屏蔽”现象,类成员的可见域将小于作用域,但此时可借助this指针或“类名::”形式指明所访问的是类成员,这有些类似于使用“::”访问全局变量。来看一段示例代码9-1 9.2 类定义的作用域与可见域 和函数一样,类的定义没有生存期的概念,但类定义有作用域和可见域。 使用类名创建对象时,首要的前提是类名可见,类名是否可见取决于类定义的可见域,该可见域同样包含在其作用域中,类本身可被定义在3种作用域内,这也是类定义的作用域: (1)全局作用域 在函数和其他类定义的外部定义的类称为全局类,绝大多数的C++类是定义在该作用域中,我们在前面定义的所有类都是在全局作用域中,全局类具有全局作用域。 (2)类作用域(类中类、嵌套类) 一个类可以定义在另一类的定义中,这是所谓嵌套类,举例来说,如果类A定义在类B中,如果A的访问权限是public,则A的作用域可认为和B的作用域相同,不同之处在于必须使用B::A的形式访问A的类名。当然,如果A的访问权限是private,则只能在类内使用类名创建该类的对象,无法在外部创建A类的对象。见代码9-2 (3)块作用域 类的定义在代码块中,这是所谓局部类,该类完全被块包含,其作用域仅仅限于定义所在块,不能在块外使用类名声明该类的对象。见代码9-3 (4)类名也存在覆盖 和普通变量的覆盖原则一样,类名也存在“屏蔽”和“覆盖”,不过,依旧可使用作用域声明符“::”指定具体使用的类名,如“::类名”访问的是全局类,使用“外部类::嵌套类”访问嵌套类。 9.3 对象的生存期、作用域和可见域 类名无生存期,只有作用域和可见域。 对象有生存期,对象的生存期也是对象中所有非静态成员变量的生存期,这些成员变量都随着对象的创建而创建,随着对象的撤销而撤销。 对象的生存期、作用域和可见域取决于对象的创建位置,同样有全局、局部、类内之分,和前面关于普通变量的介绍并无区别,这里便不在赘述。 关于对象创建有几点问题需要强调。 9.3.1 先定义,后实例化 类的定义一定要在类对象声明之前,因为编译器要知道需要为类分配多大的内存空间,仅仅对类进行声明是不够的,如: class B; //声明 B objectB; /创建B类的对象。错误 class B { …… }; //B类定义 但是,如果不创建B类的对象,而仅仅是声明一个指向类型B对象的指针(或引用),是可行的。如: class B; //声明 B* pB=NULL; //创建B类的对象。正确 B* pC=new B; //创建B类的对象。错误 class B { …… }; //B类定义 见备注代码 9.3.2 对象内存释放与堆内存 一种普遍的误解是“如果对象被撤销,其占据的内存空间被释放,那么对象创建时和函数执行中通过new和malloc申请的动态内存也会被自动释放”,实际上,除非显式地用delete或free释放,申请的动态内存不会随着对象的撤销而撤销,相反,撤销了对象,却没有释放动态内存反而会引起内存泄露。 当然,在程序结束时,操作系统会回收程序所开辟的所有内存。尽管如此,还是要养成new/delete、malloc/free配对的编程习惯,及时释放已经无用的内存。 9.4 友元 一般来说,类的私有成员只能在类的内部访问,类外的函数是不能访问它们的。 但是,可以将一个函数定义为类的友元函数,这时该函数就可以访问该类的私有成员了。 同时,也可以把另一个类B定义为本类A的友元类,这样B类就可以访问A类的任何成员了。 下面来具体讨论友元函数和友元类的概念。 9.4.1 友元之非成员函数 在类的定义中用friend声明了一个外部函数或其他类的成员函数(public和private均可)后,这个外部函数称为类的友元函数。 友元函数声明的基本格式为: friend 函数原型; 友元函数中可访问类的private成员。 用下面的比喻形容友元函数可能比较恰当,将类比作一个家庭,类的private成员相当于家庭的秘密,一般的外人是不允许探听这些秘密的,只
您可能关注的文档
- 目标管理绩效与员工激励.ppt
- 直流电源实习报告.doc
- 盾构掘进施工安全技术交底.doc
- 盾构机操作工施工安全技术交底.pdf
- 瞬态电压抑制二极管在电路中的应用.pdf
- 知识型员工的薪酬激励模式探讨_以华为公司为例.pdf
- 知识竞赛试题1.doc
- 知识竞赛题库1答案.doc
- 知识管理战略与创新行为的关系组织基础的调节作用.pdf
- 矩形的判定说课稿或教案.doc
- [海南]2024年海南大学附属幼儿园招聘幼儿教师15人笔试历年高频考点(难、易错点)附带答案详解.docx
- [淮安]2024年江苏淮安市属及部分区属事业单位招聘人员笔试历年高频考点(难、易错点)附带答案详解.docx
- [温州]2024年浙江温州市洞头区事业单位招聘中高层次人才笔试历年高频考点(难、易错点)附带答案详解.docx
- [深圳]2024年广东深圳市南山区委党校博士选聘6人笔试历年高频考点(难、易错点)附带答案详解.docx
- [淮北]安徽淮北市事业单位定向招聘驻淮部队随军家属笔试历年高频考点(难、易错点)附带答案详解.docx
- [深圳]广东深圳市公安局第十批招聘警务辅助人员2816人笔试历年高频考点(难、易错点)附带答案详解.docx
- [温州]2024年浙江温州文成县医疗卫生健康单位招聘卫技人员41人笔试历年高频考点(难、易错点)附带答案详解.docx
- [温州]2024年自然资源部温州海洋中心招聘笔试历年高频考点(难、易错点)附带答案详解.docx
- [淄博]2024年山东淄博高新区事业单位面向大学生退役士兵招聘笔试历年高频考点(难、易错点)附带答案详解.docx
- [海南]2024年海南海口市琼山幼儿园育苗分园招聘临聘教师笔试历年高频考点(难、易错点)附带答案详解.docx
最近下载
- 《高等数学(下)》(合肥工业大学)中国大学MOOC(慕课)章节测验试题(答案).pdf
- 四川省绵阳南山中学2022-2023学年高一下学期6月月考地理试卷(含答案).docx VIP
- 2021年陕西省中考物理真题试卷(含答案解析).doc
- 人教版六年级数学上册第一单元测试题(有答案).doc
- NACE-CIP2-001 V8.02(有道文档翻译结果).docx VIP
- 中等职业学校教师教学能力赛项评分指标 .pdf
- 永州市第一中学2022-2023学年高一下学期3月月考历史试卷(含答案).docx VIP
- 中国汽车基础软件发展白皮书4.0.pdf
- 开放系统11879《小学语文教学研究》期末机考真题及答案(第101套).pdf
- 16pf测试报告文档.pdf
文档评论(0)