- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 三年级语文上册习作八:那次玩得真高兴课件(共26张PPT).pptx VIP
- 六年级人教版小学英语-阅读理解专题练习(及答案).doc VIP
- 污水厂年度工作计划(模板).doc
- ECOVACS 科沃斯 净化机器人沁宝 AIRBOT Z1产品使用说明书.pdf
- 24秋人教PEP英语三年级上册 Unit 1 Making friends 单元教学课件.pptx
- 2022年防雷检测职业技能竞赛综合知识试题库大全-下(判断题部分).pdf
- 装修公司工程部品控管理:材料堆放保护规范.docx
- 2023年长沙市事业单位公开招聘考试真题.docx
- 万孚生物-市场前景及投资研究报告:POCT龙头,技术平台全覆盖,国内外双核驱动.pdf VIP
- 全数字交流伺服驱动系统KT270-H系列(V1.0)使用手册.PDF
文档评论(0)