欢迎来到天天文库
浏览记录
ID:39268170
大小:275.81 KB
页数:13页
时间:2019-06-29
《友元的概念和定义》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章友元4.1友元的概念和定义4.2友元函数4.3友元成员4.4友元类4.5友元综合举例4.1友元的概念和定义一个对象的私有数据成员和成员函数只能在类定义的范围内使用,也就是说只能通过它的公有成员函数来访问。数据隐藏给两个类共享同一函数或数据带来了额外开销,这是因为每次访问这些共享内容都需要通过函数调用来完成。使用friend关键字,友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但破坏了类的封装
2、性和数据的隐蔽性,导致程序可维护性变差,因此一定要谨慎使用。友元分为友元函数、友元成员和友元类三种,友元声明可放在类的公有、私有或保护部分,结果是一样的。遵循一定规则而使对象以外的软件系统能够不经过消息方式而直接访问对象内封装的数据成员的技术方法便是友元。友元是面向对象系统与过程系统衔接的纽带。例4.1没有使用友元时的学生成绩管理系统。友元函数定义则在类的外部,一般与类的成员函数定义放在一起。因为类重用时,一般友元是一起提供的。4.2友元函数友元函数是一种说明在类定义体内的非成员函数。friend〈返回值类型〉〈函数名〉(〈参数表〉){〈函数
3、体〉}说明:(1)友元函数是在类中说明的一个函数,它不是该类的成员函数,但允许访问该类的所有成员。它是独立于任何类的一般的外界函数。友元并不在类的范围中,它们也不用成员选择符(.或->)调用,除非它们是其它类的成员。友元函数的说明:(2)由于友元函数不是类的成员,所以没有this指针,访问该类的对象的成员时,必须使用对象名,而不能直接使用类的成员名。(3)虽然友元函数是在类中说明的,但其名字的作用域在类外,作用域的开始点在说明点,结束点和类名相同。因此,友元说明可以代替该函数的函数说明。(4)如果在说明友元时给出了该函数的函数体代码,则它是内
4、联的。友元函数的举例:【例4.2】友元函数的定义和使用一。【例4.3】友元函数的定义和使用二。【例4.4】友元函数的定义和使用三(自学)。4.3友元成员另一个类的成员函数可以作为某个类的友元,只是在声明友元函数时要加上成员函数所在的类名,称为友元成员。声明如下:friend类名∷成员函数名;与上一种友元比较,此种友元的存取范围要小得多。因为这里的友元函数只是一个类中的一个成员,friend授权该函数可以访问宣布其为友元的类中的所有成员。【例4.5】友元成员4.4友元类某一个类可以是另一个类的友元,这样作为友元的类中的所有成员函数都可以访问另一
5、个类中的私有成员。友元类的说明方式如下:friendclass〈类名〉;【例4.6】友元类一。(自学)【例4.7】友元类二。注意:(1)友元关系不具有传递性。假设类A是类B的友元,类B是类C的友元,除非在类C中声明了类A是它的友元类,否则类A并不是类C的友元。(2)友元关系是单向的,不具有交换性。假设类A是类B的友元(即在类B定义中声明A为友元类),类B是否是A的友元,要看在类中是否有相应的声明。4.5友元综合举例【例4.8】定义复数Complex类,使用友元函数,完成复数的加法、减法、乘法运算,以及对复数的输出。习题:1.友元的作用是什么?
6、2.友元概念的引入虽然方便了类之间的数据共享,但是否削弱了对象的封装性?3.友元的作用之一是:A.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性D.增加成员函数的种类4.在下面有关友元函数的描述中,正确的说法是:A.友元函数是独立于当前类的外部函数B.一个友元函数不能同时定义为两个类的友元函数C.友元函数必须在类的外部定义D.在外部定义友元函数时,必须加关键字friend
此文档下载收益归作者所有