- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++程序设计类与对象-友元函数 * * 我们知道,只有类的成员函数才能访问类的私有成员,程序中的其它函数是无法访问类的私有成员的,非成员函数只可访问类中的公有成员。 为了解决非成员函数访问私有成员的问题,C++提出了一种友元方案。友元是一种定义在类外部的普通函数,但如果在类定义中对其进行了说明,并且加以关键字friend,则该函数就成为类的友元。 友元函数的说明及使用 格式为:friend type FuncName(args) 友元函数 #includeiostream.h #includemath.h class Point { private: double x,y; public: Point(double xx, double yy){x=xx; y=yy;} void Getxy( ); friend double Distance(Point a, Point b); }; 例:分析下列程序的输出结果 void Point::Getxy( ) { cout(x,y)endl; } double Distance(Point a, Point b) { double dx=a.x-b.x; double dy=a.y-b.y; return sqrt(dx*dx + dy*dy); } void main(void) { Point p1(3.0, 4.0), p2(6.0, 8.0); p1.Getxy( ); p2.Getxy( ); double d=Distance(p1,p2); coutDistance is dendl; } Point类中说明的友元函数Distance( ),可以引用类中的私有成员,函数体中a.x, b.x, a.y, b.y都是类的私有成员,它们是通过对象引用的。在调用友元函数时,同普通函数的调用一样。本例中p1.Getxy( )和p2.Getxy( )都是成员函数的调用,要用对象来表示。而distance(p1,p2)是友元函数的调用,它直接调用,不需要对象表示,它的参数是对象。 说明: #includeiostream.h const float PI=3.14159F; class A{ float r, h; public: A(float a, float b){r=a; h=b;} float Getr(){return r;} float Geth(){return h;} friend float Volum(A ); // float Volume( ){ return PI*r*r*h; } }; float Volum(A a) { return PI*a.r*a.r*a.h;} 例:用友元函数的方法求圆柱体的体积同。 void main(void) { A a1(25,40), a2(10,40), a3(20,40); cout圆柱体1的体积为:Volum(a1)\n; cout圆柱体2的体积为:PI*a2.Getr()*a2.Getr()*a2.Geth()\n; // cout圆柱体3的体积为:a3.Volume()\n; } 计算volum1时只调用了一次友元函数,而求volum2时调用三次类A的成员函数,显然前者的运行效率要高一些。 1. 友元函数不是类的成员函数,它可以访问类中的所有成员,包括私有成员。(注意,必须将对象名或对象的引用作为友元函数的参数,并在函数体中使用运算符“.”来访问对象的成员) 2. 在类中对友元函数指定访问权限无效。(不是类的成员函数) 3. 友元函数的作用域与一般函数的作用域相同为。 4. 要谨慎使用友元函数,这种方法同时也破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。 有关友元函数的说明: 成员函数用作友元 可以将一个类的部分或全部成员函数说明为另一个类的友元,从而通过该成员函数访问另一个类中的成员。 例: 将一个类的成员函数用作另一个类的友元函数 #includeiostream.h class B; //D class A{ float x, y; public: A(float a, float b){x=a; y=b;} float Getx(){return x;} float Gety(){return y;} void Setxy(B ); //E; }; class B{ float c, d; public: B(float a, float b){c=a; d=b;} float Getc(){return c;} float Getd()
文档评论(0)