第8篇 友 元.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 友 元 8.1 友 元 函数 8.1 友元函数 在类中声明该函数 格式: friend 类型 友元函数名(参数表); 声明的位置:类的任何部位(public区,private区,意义完全一样)。 友元函数定义则在类的外部(可以与类的成员函数定义放在一起)。 8.1 友元函数 8.1 友元函数 编写一个程序求一个点到直线的距离。 设计一个点类Point,它有两个数据成员x和y,表示点的坐标。 另一个类为直线类Line,它有三个数据成员a、b和c,表示直线方程 。 设计一个函数dist(参数为Point和Line)计算一个点到直线的距离。 点(x,y)到直线( )的距离d的计算公式如下: 8.1 友元函数 8.1 友元函数 8.1 友元函数 8.2 友 元 类 8.2 友 元 类 8.2 友 元 类 8.3 友元应用实例 例:友元函数【8.6】 例:友元函数【8.7】 设计一个类 numset,用于输入一个整数数序,其中的元素都是从小到大排列的,并且不包含相同的元素。 设计一个友元函数unionset,返回两个这样的整数数序的合并结果,要求合并结果也是一个整数数序。 numset类设计: 数据成员: 整型数组 int a[MAX]; 当前数据个数 int count; 成员函数 构造函数 {count=0;} 添加一个整数 { 找到合适的位置, 是否元素相同, 指定位置后面的元素向后移动 放置新添加的元素,元素总数+1 } 显示所有整数 返回第i个整数的值 unionset函数设计: numset unionset ( numset s1, numset s2) { 创建一个临时numset s; 循环,直到有一个数组遍历完 { 取s1,s2数组当前位置下较小的元素,放入s 适当移动三个数组s1,s2,s的当前位置 } 数组s1未排完{ } 数组s2未排完{ } } 问题引入: 出于信息隐藏的目的,类的数据成员一般定义为私有成员,并通过公有的成员访问函数对外提供接口。 有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该类的友元(friend)函数。 #includeiostream.h class Sample {public: Sample( ) { n=0; } Sample( int i) { n=i;} //int getn( ) {return n;} //void setn(int i) {n=i;} void display( ) { coutn=nendl;} private: int n; }; Sample square(Sample x) { Sample a; a.n=x.n*x.n; //错误 return a; } void main() { Sample a(5), b; b=square(a); b.display(); } C++支持友元函数和友元类。 友元函数和友元类统称为友元。 友元的作用是提高程序的运行效率,但也牺牲了类的封装性。 8.1 友元函数 8.2 友 元 类 8.3 友元应用实例 注意:类的友元函数可以直接访问该类的所有成员(公有的、私有的、保护的),但它不是成员函数,它可以像普通函数一样在任何地方调用。 #includeiostream.h class Sample {public: Sample( ) { n=0; } Sample( int i) { n=i;} int getn( ) {return n;} void display( ) { coutn=nendl;} private: int n; friend Sample square(Sample); //友元函数说明 }; Sample square(Sample x) { int tmp=x.n*x.n; Sample a(temp); return a; } void main() { Sample a(5), b; b=square(a); b.display(); } return Sample(temp); #includeiostream.h #includemath.h class Point

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档