友元的概念和定义(精)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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