文库网
ImageVerifierCode 换一换
首页 文库网 > 资源分类 > PPTX文档下载
分享到微信 分享到微博 分享到QQ空间

《面向对象程序设计》课件第4章 友元.pptx

  • 资源ID:19622098       资源大小:246.81KB        全文页数:14页
  • 资源格式: PPTX        下载积分:10文币
微信登录下载
快捷下载 游客一键下载
账号登录下载
三方登录下载: QQ登录 微博登录
二维码
扫码关注公众号登录
下载资源需要10文币
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

《面向对象程序设计》课件第4章 友元.pptx

1、第第第第4 4 4 4章章章章 友友友友 元元元元4.1 友元的概念和定义友元的概念和定义4.2 友元函数友元函数4.3 友元成员友元成员4.4 友元类友元类4.5 友元综合举例友元综合举例4.1 4.1 友元的概念和定义友元的概念和定义 一一个个对对象象的的私私有有数数据据成成员员只只能能在在类类定定义义的的范范围围内内使使用用,也也就就是是说说只只能能通通过过它它的的公公有有成成员员函函数数来来访访问问。对对象象的的这这种种数数据据封封装装和和数数据据隐隐藏藏使使对对象象和和外外界界以以一一堵堵不不透透明明的的墙墙隔隔开开,这这给给软软件件设设计计者者增增加加了了负负担担,它它要要求求设设

2、计计者者确确保保为为每每个个类类提提供供足足够够的的方方法法,以以应应对对所所遇遇到的种种情况。到的种种情况。数数据据隐隐藏藏给给两两个个类类共共享享同同一一函函数数或或数数据据带带来来了了额额外外开开销销,这这是是因因为为每每次次访访问问这这些些共共享享内内容容都都需需要要通通过过函数调用来完成。函数调用来完成。4.1 4.1 友元的概念和定义友元的概念和定义 在在某某些些情情况况下下,把把成成员员级级别别的的访访问问控控制制赋赋于于非非本本类类成成员员的的普普通通函函数数或或者者另另一一个个类类的的成成员员函函数数时时,会会更更方方便便一一些些。使使使使用用用用friend关关关关键键键键

3、字字字字,友友友友元元元元提提提提供供供供了了了了在在在在不不不不同同同同类类类类的的的的成成成成员员员员函函函函数数数数之之之之间间间间、类类类类的的的的成成成成员员员员函函函函数数数数与与与与一一一一般般般般函函函函数数数数之之之之间间间间进进进进行行行行数数数数据据据据共共共共享享享享的的的的机机机机制制制制。通通过过友友元元,一一个个普普通通函函数数或或另另一一个个类类中中的的成成员员函函数可以访问类中的私有成员和保护成员。数可以访问类中的私有成员和保护成员。C+C+中中的的友友元元为为“封封装装”这这堵堵不不透透明明的的墙墙开开了了一一个个小小孔,外界可以通过这个小孔窥视类内部的秘密

4、。孔,外界可以通过这个小孔窥视类内部的秘密。友元分为友元分为友元函数友元函数、友元成员友元成员和和友元类友元类三种。三种。4.1 4.1 友元的概念和定义友元的概念和定义 在在某某些些情情况况下下,把把成成员员级级别别的的访访问问控控制制赋赋于于非非本本类类成成员员的的普普通通函函数数或或者者另另一一个个类类的的成成员员函函数数时时,会会更更方方便便一一些些。使使使使用用用用friend关关关关键键键键字字字字,友友友友元元元元提提提提供供供供了了了了在在在在不不不不同同同同类类类类的的的的成成成成员员员员函函函函数数数数之之之之间间间间、类类类类的的的的成成成成员员员员函函函函数数数数与与与

5、与一一一一般般般般函函函函数数数数之之之之间间间间进进进进行行行行数数数数据据据据共共共共享享享享的的的的机机机机制制制制。通通过过友友元元,一一个个普普通通函函数数或或另另一一个个类类中中的的成成员员函函数可以访问类中的私有成员和保护成员。数可以访问类中的私有成员和保护成员。C+C+中中的的友友元元为为“封封装装”这这堵堵不不透透明明的的墙墙开开了了一一个个小小孔,外界可以通过这个小孔窥视类内部的秘密。孔,外界可以通过这个小孔窥视类内部的秘密。友元分为友元分为友元函数友元函数、友元成员友元成员和和友元类友元类三种。三种。4.1 4.1 友元的概念和定义友元的概念和定义 在在某某些些情情况况下

6、下,把把成成员员级级别别的的访访问问控控制制赋赋于于非非本本类类成成员员的的普普通通函函数数或或者者另另一一个个类类的的成成员员函函数数时时,会会更更方方便便一一些些。使使使使用用用用friend关关关关键键键键字字字字,友友友友元元元元提提提提供供供供了了了了在在在在不不不不同同同同类类类类的的的的成成成成员员员员函函函函数数数数之之之之间间间间、类类类类的的的的成成成成员员员员函函函函数数数数与与与与一一一一般般般般函函函函数数数数之之之之间间间间进进进进行行行行数数数数据据据据共共共共享享享享的的的的机机机机制制制制。通通过过友友元元,一一个个普普通通函函数数或或另另一一个个类类中中的的

7、成成员员函函数可以访问类中的私有成员和保护成员。数可以访问类中的私有成员和保护成员。C+C+中中的的友友元元为为“封封装装”这这堵堵不不透透明明的的墙墙开开了了一一个个小小孔,外界可以通过这个小孔窥视类内部的秘密。孔,外界可以通过这个小孔窥视类内部的秘密。友元分为友元分为友元函数友元函数、友元成员友元成员和和友元类友元类三种。三种。注意:注意:友元能够使得普通函数直接访问类的友元能够使得普通函数直接访问类的友元能够使得普通函数直接访问类的友元能够使得普通函数直接访问类的保护数据,避免了类成员函数的频繁调用,可以节约保护数据,避免了类成员函数的频繁调用,可以节约保护数据,避免了类成员函数的频繁调

8、用,可以节约保护数据,避免了类成员函数的频繁调用,可以节约处理器开销,提高程序的效率。但矛盾的是,即使是处理器开销,提高程序的效率。但矛盾的是,即使是处理器开销,提高程序的效率。但矛盾的是,即使是处理器开销,提高程序的效率。但矛盾的是,即使是最大限度的保护,避免把类成员全部设置成最大限度的保护,避免把类成员全部设置成最大限度的保护,避免把类成员全部设置成最大限度的保护,避免把类成员全部设置成publicpublic,同样也破坏了类的封装特性,这即是同样也破坏了类的封装特性,这即是同样也破坏了类的封装特性,这即是同样也破坏了类的封装特性,这即是友元的缺点友元的缺点,在现在在现在在现在在现在CPU

9、CPUCPUCPU速度越来越快的今天我们并不推荐使用它,速度越来越快的今天我们并不推荐使用它,速度越来越快的今天我们并不推荐使用它,速度越来越快的今天我们并不推荐使用它,但它作为但它作为但它作为但它作为C+C+C+C+一个必要的知识点,一个完整的组成部一个必要的知识点,一个完整的组成部一个必要的知识点,一个完整的组成部一个必要的知识点,一个完整的组成部分,我们还是需要讨论一下的。分,我们还是需要讨论一下的。分,我们还是需要讨论一下的。分,我们还是需要讨论一下的。4.2 4.2 友元函数友元函数 在在类类中中声声明明一一个个普普通通函函数数,在在前前面面加加上上friendfriend修修饰饰,

10、那那么么这这个个普普通通函函数数就就成成了了该该类类的的友友友友元元元元函函函函数数数数,可可以以访访问问该该类的一切成员类的一切成员 。class Circle struct point int x,y;center;int radius;public:double getArea();double getDistance();friend void display(Circle);/声明普通函数声明普通函数display为类为类Circle的友元函数的友元函数 友元函数的说明友元函数的说明方法方法:f f f friendriendriendriend ();友元函数友元函数的的特点:特点

11、:1.一个类的一个类的友元函数不是类的成员函数友元函数不是类的成员函数友元函数不是类的成员函数友元函数不是类的成员函数,它是独立于类的,它是独立于类的一般的一般的外部函数,可以访问这个类的所有私有和保护成员外部函数,可以访问这个类的所有私有和保护成员。2.从技术上讲,从技术上讲,可以在类定义中的任何一个位置声明友元可以在类定义中的任何一个位置声明友元可以在类定义中的任何一个位置声明友元可以在类定义中的任何一个位置声明友元函数函数函数函数。因为该声明涉及到非成员函数,因此访问限定符。因为该声明涉及到非成员函数,因此访问限定符(private,public,protectedprivate,pub

12、lic,protectedprivate,public,protectedprivate,public,protected)是不起作用的。但是,一般)是不起作用的。但是,一般情况下很多人习惯上在类中首先给出友元函数的声明。情况下很多人习惯上在类中首先给出友元函数的声明。3.友元函数可定义在类内友元函数可定义在类内(内联)(内联)或类外或类外。在。在类外类外类外类外定义定义定义定义时时时时,格式与普通函数相同格式与普通函数相同,不需要加不需要加不需要加不需要加friendfriendfriendfriend关键字和关键字和关键字和关键字和 类名类名类名类名:关于友元函数的说明:关于友元函数的说明

13、:关于友元函数的说明:关于友元函数的说明:4.4.友友元元函函数数一一般般带带有有一一个个该该类类的的入入入入口口口口参参参参数数数数。因因为为友友元元函函数数不不是是类类的的成成员员,没没有有this指指针针,所所以以它它不不能能直直接接引引用用对对象象成成员员的的名名称称,它它必必须须通通过过作作为为入入口口参参数数传传递递进进来来的的对对象象名名或或对象指针来引用该对象的成员。对象指针来引用该对象的成员。对象名对象名对象名对象名.成员名成员名成员名成员名对象指针对象指针对象指针对象指针-成员名成员名成员名成员名 void display(Circle c1)coutthe center

14、of the circle is:c1.center.x,c1.center.y;cout the radius is:c1.radius)-)-)-)调调调调用用用用)。因因此此,允允许许设设计计者者选选择择他他所所认认为为更更具具可可读读性性的的语语法法来来降降低维护成本。低维护成本。6.6.友友元元函函数数在在类类中中说说明明,但但其其名名字字的的作作用用域域在在类类外外,作作作作用用用用域域域域的的的的开开开开始始始始点点点点在在在在说说说说明明明明点点点点,结结结结束束束束点点点点和和和和类类类类名名名名相相相相同同同同。因因此此,友友元元说说明明可可以以代代替替该该函函数数的的函函

15、数数说说明明。如如果果在在说说明明友友元元时时给给出了该函数的函数体代码,则它是内联的。出了该函数的函数体代码,则它是内联的。7.7.一一一一个个个个函函函函数数数数可可可可以以以以成成成成为为为为多多多多个个个个类类类类的的的的友友友友元元元元函函函函数数数数,因因而而可可以以访访问多个类的成员。问多个类的成员。关于友元函数的说明:关于友元函数的说明:5.成成员员函函数数和和友友元元函函数数具具有有同同等等的的特特权权(100%100%的的),主主要要的的区区别别在在于于调调用用形形式式不不同同。友友元元函函数数的的调调用用形形式式与与普普通通函函数数相相同同,象象f(x)f(x)这这样样调

16、调用用,而而成成员员函函数数象象x.f(x.f()这这样样调调用用。(注注注注意意意意:友友友友元元元元函函函函数数数数不不不不能能能能用用用用成成成成员员员员选选选选择择择择符符符符(.或或或或-)-)-)-)调调调调用用用用)。因因此此,允允许许设设计计者者选选择择他他所所认认为为更更具具可可读读性性的的语语法法来来降降低维护成本。低维护成本。6.6.友友元元函函数数在在类类中中说说明明,但但其其名名字字的的作作用用域域在在类类外外,作作作作用用用用域域域域的的的的开开开开始始始始点点点点在在在在说说说说明明明明点点点点,结结结结束束束束点点点点和和和和类类类类名名名名相相相相同同同同。因

17、因此此,友友元元说说明明可可以以代代替替该该函函数数的的函函数数说说明明。如如果果在在说说明明友友元元时时给给出了该函数的函数体代码,则它是内联的。出了该函数的函数体代码,则它是内联的。7.7.一一一一个个个个函函函函数数数数可可可可以以以以成成成成为为为为多多多多个个个个类类类类的的的的友友友友元元元元函函函函数数数数,因因而而可可以以访访问多个类的成员。问多个类的成员。关于友元函数的说明:关于友元函数的说明:请请记记住住:友友元元函函数数本本身身是是一一个个普普通通函函数数,由由类类授授权权,使使它它成成为为类类的的友友元元函函数数,且且仅仅是是该该类类的的友友元元。而而一一个个普普通通函

18、函数数本本身身无无法法把把自自己己定定义义为为友友元元函函数数,因因为为这这样样做无意义,同时也违背了数据隐藏原则。做无意义,同时也违背了数据隐藏原则。综合举例综合举例1:1:在在circlecircle类中使用友元类中使用友元4.3 4.3 友元成员友元成员友元成员是指用友元成员是指用另一个类的成员函数作为类的友元另一个类的成员函数作为类的友元另一个类的成员函数作为类的友元另一个类的成员函数作为类的友元,需要在声明友元时加上该友元函数所在的类名。需要在声明友元时加上该友元函数所在的类名。与上一种友元比较,此种友元的作用域范围要小与上一种友元比较,此种友元的作用域范围要小得多。因为这里的友元函

19、数是一个类中的成员,得多。因为这里的友元函数是一个类中的成员,friend授权该函数可以访问宣布其为友元的类中的所有成员。授权该函数可以访问宣布其为友元的类中的所有成员。class A int a;public:friend void B:fb();/声明类声明类B的成员函数的成员函数fb为类为类A的友元函数的友元函数4.4 4.4 友元类友元类不仅函数可以作为一个类的友元,一个类也可以作不仅函数可以作为一个类的友元,一个类也可以作为另一个类的友元。当一个类被说明为另一个类的友元为另一个类的友元。当一个类被说明为另一个类的友元时,它的所有的成员函数都成为另一个类的友元函数,时,它的所有的成员函

20、数都成为另一个类的友元函数,这就意味着作为友元的类中的所有成员函数都可以访问这就意味着作为友元的类中的所有成员函数都可以访问另一个类的私有成员。另一个类的私有成员。class A int a;public:friend class B;/声明类声明类B为类为类A的友元类的友元类【例例4.54.5】【】【例例4.64.6】(1)(1)友友元元关关系系不不具具有有传传递递性性。假假设设类类A A是是类类B B的的友友元元,类类B B是是类类C C的的友友元元,除除非非在在类类C C中中声声明明了了类类A A是是它它的的友元类,否则类友元类,否则类A A并不是类并不是类C C的友元。的友元。(2)(

21、2)友元关系是单向的,不具有交换性。假设类友元关系是单向的,不具有交换性。假设类A A是类是类B B的友元(即在类的友元(即在类B B定义中声明定义中声明A A为友元类),类为友元类),类B B是否是是否是A A的友元,要看在类中是否有相应的声明。的友元,要看在类中是否有相应的声明。关于友元关系的说明:关于友元关系的说明:友元关系既友元关系既不继承不继承,也,也不传递不传递,也,也不自反不自反【示例程序示例程序1】:未使用友元的学生管理系统:未使用友元的学生管理系统【示例程序示例程序2】:使用友元的学生管理系统:使用友元的学生管理系统【示例程序示例程序3】:使用一个友元函数访问两个:使用一个友元函数访问两个 不同的类不同的类【示例程序示例程序4】:使用友元成员:使用友元成员【示例程序示例程序5】:使用友元类:使用友元类程序举例程序举例


注意事项

本文(《面向对象程序设计》课件第4章 友元.pptx)为本站会员(bubibi)主动上传,文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文库网(点击联系客服),我们立即给予删除!




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

文库网用户QQ群:731843829  微博官方号:文库网官方   知乎号:文库网

Copyright© 2025 文库网 wenkunet.com 网站版权所有世界地图

经营许可证编号:粤ICP备2021046453号   营业执照商标

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png