




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第 9 讲讲 教学内容教学内容 5 4 类的友元 5 4 1 友元函数 教学重点和难点教学重点和难点 1 友元函数的作用和使用方法 教学方法 教学方法 通过举实际生活中的例子 来讲解类的友元的作用 以及友元函数的使用方 法 教学学时教学学时 2 学时 教学过程教学过程 一一 类类的友元的友元 1 为为什么需要友元 什么需要友元 a 将数据封装到类中使其称为私有成员以后 数据的安全性大大提高了 但对数据的访问效 率却下降了 b 为了提高效率 在安全上就不得不作一点妥协 允许指定的函数 普通函数和其它类的成员 函数 或其它类可以访问类的私有成员 c 这些被指定的函数或其它类就称为这个类的友元 d 友元是 C 提供的一种破坏数据封装和数据隐藏的机制 e 作用 增加灵活性 使程序员可以在封装和共享方面做合理选择 f 通过友元可以访问封装在一个类中的私有和保护的数据 g 可以使用友元函数和友元类 2 友元的使用方法 友元的使用方法 a 友元在类声明中用 friend 关键字说明 b 友元函数不是这个类的函数成员 访问此类中的成员必须通过对象来访问 c 友元关系是不能传递的 是单向的 是不能被继承的 d 若一个类为另一个类的友元 则此类的所有成员都能访问对方类的私有成员 声明语法 将友元类名在另一个类中使用 friend 修饰说明 3 使用友元要注意 使用友元要注意 使用友元的目的是为了提高访问特定数据的效率 一旦将某个函数或者类声明为另一个类的友元 就意味着这个函数或类的实现严重依赖另 一个类的 如果另外一个类的实现发生了变化 就会 如果对访问的效率要求不是很高 或者两个对象并不具有天然的紧密联系 请不要使用友元 因此 应该只在有限的情况下 如操作符重载 使用友元 三个成员访问符号与友元关系的声明无关 因此友元关系声明可以防在类定义中的任何位 置 良好的编程习惯 将类中的所有友元关系的声明放在类的定义后 不要在其前面添加任何成 员访问说明符 例例 1 统计银统计银行存款行存款问题问题 设计一个程序 其中有两个类 Cbank 和 Bbank 分别为中国银行类和工商银行类 每个类 均包含一个私有数据 balance 用于存放储户在该行的存款数 以及相关的输入输出函数 计 算储户在这两家银行的总存款数目 分析 分析 由于需要在外部对两个类的私有数据进行访问 因此需要设计一个友元函数 total 这 样可以通过友元函数的访问属性 统计一个储户在这两家银行的总存款数 友元函数有一个重要的应用 就是多个类可以共享友元函数 在某些情况下 2 个类或者多 个类可以包含相互关联的成员 程序演示 程序演示 include class Bbank 前向引用声明 声明 Cbank class Cbank friend int total Cbank ck Bbank bk private int balance 描述存款数目 public Cbank int b 0 balance b void InputBalance cout 请输入在中国银行的存款数目 balance void OutputBalance cout 在中国银行的存款数目是 balance endl 声明 Bbank class Bbank friend int total Cbank ck Bbank bk private int balance 描述存款数目 public Bbank int b 0 balance b void InputBalance cout 请输入在工商银行的存款数目 balance void OutputBalance cout 在工商银行的存款数目是 balance endl 求总存款数的函数 int total Cbank ck Bbank bk return ck balance bk balance void main void Cbank ck 200 Bbank bk ck OutputBalance bk OutputBalance bk InputBalance cout 总存款数目是 total ck bk endl 例例 2 计计算点到直算点到直线线的距离的距离 1 设计一个点类 Point 有两个私有数据成员 x 和 y 表示点的坐标 另一个类为直线类 Line 有 三个私有数据成员 a b c 表示直线方程 ax by c 0 2 点到直线的距离计算公式如下 d ax by c sqrt a a b b 分析 分析 1 设计一个点类 Point 有 2 个私有数据成员 x y 表示点的坐标 2 设计一个直线类 Line 有三个私有数据成员 a b c 表示直线方程 ax by c 0 3 根据计算公式 求点到直线的距离 这个函数要访问这个类的私有数据成员 所以把这个 函数设为这两个类的友元函数 程序代码如下 include include class Line 前向引用声明 声明 Point 类 class Point friend double distance Point p Line ln 1 声明函数 distance 为类 Point 的友元函数 2 友元函数不是 Point 类的成员函数 所以不能直接访问数据成员 只能通过 对象名 的方式来访问 private int x int y public Point int xx 0 int yy 0 x xx y yy int GetX return x int GetY return y 声明 Line 类 class Line friend double distance Point p Line ln private int a int b int c public Line int aa int bb int cc a aa b bb c cc int GetA return a int GetB return b int GetC return c 求距离的函数 double distance Point p Line ln int xx 分子 int yy 分母 double d xx ln GetA p GetX ln GetB p GetY ln GetC yy sqrt ln GetA ln GetA ln GetB ln GetB d fabs double xx yy return d 当函数 distance 为类 Point 和类 Line 的友元函数后 double distance Point p Line ln int xx 分子 int yy 分母 double d xx ln a p x ln b p y c yy sqrt ln a ln a ln b ln b d fabs double xx yy 函数 distance 是类 P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路局机务考试题及答案
- 2025年广西壮族自治区纪委监委公开遴选公务员笔试试题及答案解析
- 山西联合体考试题及答案
- 农业科研技术合作开发合同书
- 技士证考试题库及答案
- 鞍山中考模拟考试题及答案
- 岳阳二中考试题目及答案
- 信阳九中分班考试试卷及答案
- 日本驾考笔试题库及答案
- 人事管理人员笔试试题及答案
- 学业规划师试题
- 一种模块化无线供电书桌的设计获奖科研报告
- (正式版)JBT 106-2024 阀门的标志和涂装
- 家庭教育指导服务站工作制度
- 制氮机日常点检记录表
- 《学术诚信讲座》课件
- 结肠癌肝转移护理查房课件
- 口腔预防保健课件
- 手机行业售后管理制度
- 肇庆端州正西社区评估报告
- 九年级数学上(前两章)试题 Microsoft Word 文档1
评论
0/150
提交评论