- 1、本文档共96页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
class A{ int x,y; public: void Setxy(int a, int b) { x=a; y=b;} }; A a1, a2; a1.Setxy(1,2); a2.Setxy(3,4); 执行a2.Setxy()时,先执行this=a2,再进入函数体 例:在类函数成员中使用this指针。 #includeiostream.h class A { int i; public: A(int a=0){ i=a;} void input(int a) { this-i=a;} void output() { couti=iendl;} }; void main() { A a(5); a.input(10); a.output(); } 显式使用this指针 隐式使用this指针 友元函数不是成员函数,用法也与普通的函数完全一致,只不过它能访问类中所有的数据。友元函数破坏了类的封装性和隐蔽性,使得非成员函数可以访问类的私有成员。 一个类的友元可以自由地用该类中的所有成员。 例:利用友元函数计算矩形的面积。 #includeiostream.h class Rectangle { float x,y; public: float Getx(){return x;} float Gety(){return y;} Rectangle(float x1,float x2) { x=x1;y=x2;} friend float area(Rectangle c); }; float area(Rectangle c) //友元函数定义 { return (c.x*c.y);} void main() { Rectangle c1(2,4); //定义矩形对象 coutarea(c1)\n; //使用友元函数计算矩形面积 coutc1.Getx()*c1.Gety()\n; //调用成员函数计算矩形面积 } 程序执行结果为: 8 8 例:类A中有数据成员x,类B中有数据成员y,定义一个友元函数cj计算x和y的乘积。 #includeiostream.h class B; class A { int x; friend void cj(A,B ); public: A(int x1){x=x1;} }; class B { int y; public: B(int x1){y=x1;} friend void cj(A,B);}; void cj(A a, B b) { coutA.x*B.y=a.x*b.yendl; } void main() { A a(2); B b(4); cj(a,b); } 程序的运行结果为: A.x*B.y=8 声明类 关于友元函数,有以下几点说明: 友元函数的声明可以放在类体中的任何部分,包括私有部分或公有部分,它们是没有区别的; 一个函数可以说明为多个类的友元函数,只需要在各个类中分别声明,在类外定义就可以了,在类外定义时,无需再使用关键字friend; 友元函数的形参表中应含有类的对象(或引用); 友元函数的作用域与一般函数的作用域相同,调用也与一般函数的调用方式和原理一致; 友元函数可以提高程序运行效率,但是使用时有一定危险,应该谨慎使用。一般用于使用友元函数来读取对象中的成员数据而不是修改对象中的成员数据,以保证成员数据的安全。 例:定义一个类的成员函数作为另一个类的友元函数。 class Rectangle; class Line { float z; public: float Getz(){return z;} Line(float z1){z=z1;} float area(Rectangle) { return (c.x*c.y);} }; class Rectangle { float x,y; public: float Getx(){return x;} float Gety(){return y;} Rectangle(float x1,float x2) { x=x1;y=x2;} friend float Line::area (Rectangle c); }; void main() { Rectangle c1(2,4); Line l1(5);
您可能关注的文档
最近下载
- 新教材鲁科版高中物理选择性必修第二册全册各章节知识点考点重点难题解题规律提炼汇总.pdf VIP
- 铁路安全管理条例.pptx VIP
- 22S521 预制装配式混凝土检查井.docx VIP
- 外墙保温装饰一体板施工方案.docx VIP
- HD微机继电保护测试系统说明书.pdf.comp.pdf
- 新概念英语第一册Lesson99-100练习题.docx VIP
- 12S8排水工程图集.docx VIP
- DZ_T 0181-1997水文测井工作规范.pdf
- CJJ 143-2010 埋地塑料排水管道工程技术规范.docx VIP
- 2024浮梁县教体系统“归雁计划”选调历年考试试题及答案.docx VIP
文档评论(0)