- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络游戏开发语言基础-C++程序设计 专业教程 理论讲解部分 Ver3.1 第049课 C++语言中的类 概述: 友元函数与友元类 运算符重载 重点: 难点: 友元函数与友元类 运算符重载 11 C++语言中的类 第049课 C++语言中的类 面向对象程序设计主张程序的封装,数据的隐藏,不过任何事物都不是绝对的,友元的概念是C++语言为用户提供的在局部打破这种封装和隐藏的手段,好像一个家庭的财务,总是要通过防盗门,门锁,保险柜等措施不让外人接触。但在特殊情况下,例如全家出游,又需检查煤气,水,电情况,就不得不把钥匙交给可依赖的邻居。这位邻居就是友元。 11.3友元函数与友元类 11.3.1 友元的性质和作用 用关键字friend 说明友元的概念为C++所特有,其作用是,在类的说明语句中出现: 位于一个函数说明语句之前,指出该函数为这个类的友元函数。 位于一个类名之前,指出该类是这个类的友元类。 11 C++语言中的类 第049课 C++语言中的类 例如: class A { … friend int f(int a); … friend class B; … }; 11 C++语言中的类 第049课 C++语言中的类 在类A 中说明的友元函数f: 它不是A 的函数成员。 f 的定义可以在类A 的说明内,也可以在类外。 函数f 虽不是A 的成员,但有权访问和调用A 的所有私有及 保护成员。 在类A 中说明的友元类B: 它可能是与A 无关的另外一个类。 要在类外说明。 B 的任一函数都有权访问和调用类A 的所有成员,包括私有及保护成员。 11 C++语言中的类 第049课 C++语言中的类 “单方向” — 若ClaA 具有友元类ClaB,并不意味着 ClaB 也具有友元类ClaA (“非相互”)。 “不继承” — 若ClaA 具有友元类ClaB(即,ClaB 是ClaA 的友元类),又ClaB 具有子代类ClaC(即,ClaC 是ClaB 的派生类),并不意味从ClaC 可以直接存取ClaA 的私有成员。关于继承与派生请参看后面章节的内容。 “不传递” — 若ClaA 具有友元类ClaB(即,ClaB 是ClaA 的友元类),又ClaB 具有友元类ClaC(即,ClaC 是ClaB 的友元类),并不意味从ClaC 可以直接存取ClaA 的私有成员。 关于友元说明还应注意的是,它有如下三特点:“单方向”、“不继承”、“不传递”。 11 C++语言中的类 第049课 C++语言中的类 11.3.2 友元类的例子 下述程序自定义一个示意性的复数类型complex,其中说明了两个友元函数,使用该类可以完成复数的加法以及对复数的输出。并编制了主函数,说明complex 类对象,对定义的各函数进行调用。 #includeiostream using namespace std; class complex { //自定义的复数类型complex double real; //复数实部 double imag; //复数虚部 public: complex(); //无参构造函数 complex(double r, double i); //2 参构造函数 friend complex addCom(complex c1, complex c2); 11 C++语言中的类 第049课 C++语言中的类 //友元函数,实现复数加法c1+c2(二参数对象相加), //返回complex 类对象注意友元函数中没有this 指针, //从而没有“当前调用者对象”的概念 friend void outCom (complex c); //输出complex 类对象c 的有关数据(各分量) }; complex::complex() { //无参构造函数,将real 及imag 置为0 real=0; imag=0; } complex::complex(double r, double i) { //两个参数构造函数 real=r; imag=i; } 11 C++语言中的类 第049课 C++语言中的类 complex addCom(complex c1, complex c2) { //友元函数,实现复数加法c1+c2 complex c; //局部于函数的临时对象 c.real=
您可能关注的文档
最近下载
- 新人教版高中数学必修第二册统计全套课件.pptx VIP
- 台球厅消防安全应急预案.docx VIP
- 海外代理协议合同协议.docx VIP
- 初中教科研课题:《初中语文预习方法研究》课题研究工作报告.doc VIP
- 2025至2030年中国新疆维吾尔自治区建筑市场运行态势及行业发展前景预测报告.docx
- 简述10KV 高压配电柜安装.doc VIP
- GB50148-2010 电气装置安装工程电力变压器油浸电抗器、互感器施工及验收规范.pdf VIP
- 2025航天恒星科技有限公司招聘80+人笔试历年参考题库附带答案详解.pdf
- RB∕T 174-2021 司法鉴定法庭科学机构能力专业要求.pdf
- CP-717安装指南.doc VIP
文档评论(0)