- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * 1.7.1 友元函数 一、友元函数 友元函数是在类外定义的一个函数,不是类的成员函数。这个函数可以是普通的C++函数,或者是其他类的成员函数。即普通友元函数和友元成员函数。 友元函数是定义在类外部,但需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。 友元函数可以访问类中的保护和私有成员。 二、友元函数的定义 普通友元函数的定义: friend 类型标识符 友元函数名(参数列表); 友元成员函数(即将其它类的成员函数声明为该类的友元函数)的定义: friend 类型标识符 其他类名 :: 友元函数名(参数列表); * * 1.7.1 友元函数 三、友元函数与类之间的关系 类B 成员函数f1() …… A类的友元成员函数: 类型标识符f2(参数列表)) 一般普通函数: 类型标识符fun1(参数列表) A类的友元函数函数: 类型标识符fun2(参数列表) 类A public 成员 protected 成员 private成员 friend类型标识符fun2(参数列表); friend类型标识符B::f2(参数列表); * * 【例1.17】设计点类CPoint,编写一个函数计算两点之间的距离。 分析:点类CPoint私有数据成员X,Y表示点的坐标,定义成员函数GetX()和GetY()分别得到点的横坐标和纵坐标,定义一个普通函数计算两点间的距离时,得到两点的坐标值,计算距离。 #include iostream.h #include math.h class CPoint { public: CPoint(int x=0, int y=0); double GetX(); double GetY(); private: double X,Y; }; CPoint::CPoint(int x, int y) { X=x; Y=y;}; double CPoint::GetX() { return X;} double CPoint::GetY() { return Y;} double GetDistance(CPoint start, CPoint end) //普通函数,求两点之间的距离。 { double x1,y1,x2,y2; double d; x1 = start.GetX(); //通过成员函数得到私有成员X y1 = start.GetY(); //通过成员函数得到私有成员Y x2 = end.GetX(); y2 = end.GetY(); //计算两点之间的距离 d = sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) ); return d; } void main() { CPoint p1(1,1), p2(4,5); double d; d = GetDistance(p1,p2); cout 两点之间的距离是: d endl; } GetDistance()中访问不能直接访问类的私有数据成员X、Y。而是通过公有的成员函数得到X、Y的值。在计算两点之间的距离时,要多次调用公有成员函数,效率低。 将普通函数GetDistance()声明为点类的友元函数 解 决 * * 使用友员函数修改例【例1.17】 #include iostream.h #include math.h class CPoint { public: CPoint(int x=0, int y=0); double GetX(); double GetY(); friend double GetDistance(CPoint start, CPoint end); //声明普通函数为类的友元函数 private: double X,Y; }; CPoint::CPoint(int x, int y) { X=x; Y=y; }; double CPoint::GetX() { return X;} double CPoint::GetY() { return Y;} * * double GetDistance(CPoint start, CPoint end) //友元函数,求两点之间的距离。 { double d; //友元函数可以访问类的私有成员 d = sqrt( (end.X-start.X)*(end.X-start.X) + (end.Y-start.Y)*(end.Y-start.Y) ); return d; } void main() { CPoint p1(1,1)
您可能关注的文档
最近下载
- 高热封强度耐135℃高温蒸煮的CPP膜及其制备方法.pdf VIP
- 物业交接表格-全.pdf VIP
- (高清版)DG∕TJ 08-2433B-2023 外墙保温一体化系统应用技术标准(现浇混凝土保温外墙).docx VIP
- GB8478-2020 铝合金门窗国家标准.pdf VIP
- 福建福州市八县市2024-2025高二上学期期中数学试卷及答案.pdf VIP
- 正确的员工考核评分表1.doc VIP
- 部编版三年级下册晋升职称无生试讲稿——22.我们奇妙的世界(1).docx VIP
- 《人工智能发展历程》课件.ppt VIP
- 十五规划PPT课件.pptx VIP
- 入党积极分子考试题库及答案.docx VIP
原创力文档


文档评论(0)