C++友元函数讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[用例] #include<iostream> class A { int n; public: A() {n=5;} friend class B; }; class B { public:
void display( A t) { cout<< “n=“<<t.n<<endl;} }; int main() { A a; B b; b.display(a); }
友
元
引子
因为C++的封装性和数据隐藏性,只有类自身 的函数才可以不受限制的访问类的非公有成员; 任何非成员函数直接访问类中非公有数据成员 都会导致编译错误. 例外情况:需要非成员函数去访问类的私有数 据成员. ♂解决办法:1,把私有属性(private)变为公有 (public)-----但这样做违背了数据封装性和数 据隐藏性; 2,可把对应的非成员函数定义为该 类的友元函数来解决.
class Line //线类 { public: Line(int,int,int); friend double dis(Line,point); //计算 距离 private: int a,b,c; }; #endif
北京科海电子出版社 ·http://www.khp.com.cn <<<
计一个友元函数dist计算一个点到直线的距离。点(x,y)到直线
(ax+by+c=0)的距离d的计算公式如下:
d = ax + b y + c a +b
2 2
北京科海电子出版社 ·http://www.khp.com.cn <<<
1 友元函数
//file.h #ifndef FILE_H #define FILE_H class Point //点类 { Public: Point(int,int); int x,y; };
2友 元 类
C++中允许声明一个类为另一个类的友元类(friend class)。例如, 以下语句声明类B是类A的友元类: class A { ...
public:
friend class B百度文库 ...
};
北京科海电子出版社 ·http://www.khp.com.cn <<<
2友元类
1 友元函数
声明友元函数的方式是在类声明中用关键词friend声 明该函数,其格式 如下: friend 函数类型 友元函数名(参数表);
北京科海电子出版社 ·http://www.khp.com.cn <<<
1 友元函数
[用例]P152 例,补充完整,编译运行.
1 友元函数
【用例】编写一个程序,以友元函数方式计算一个点到一条直线的距 离。 解:设计一个点类Point,它有两个公有数据成员x和y,表示点的坐标 (因为要在类外使用,所以设计为公有的)。另一个类为直线类Line, 它有3个私有数据成员a、b和c,表示直线方程ax+by+c=0,该类中设
1 友元函数
//func.cpp #include<cmath> Point::Point(int x1,int y1): X(x1),y(y1) { } Line::Line(int a1,int b1,int c1) :a(a1),b(b1),c(c1) {}
double dis(Line m,Point n) { double d; d=abs(m.a*n.x+m.b*n.y +m.c)/(sqrt(m.a*m.a +m.b*m.b)); return d;} int main() { Point p(10,10); Line t(2,4,-3); cout<<“点到线的距 离:”<<dis(t,p)<<endl; } // 12.7456
友元函数
概念:友元函数就是可以直接访问类的成员(包 括私有数据成员)的非成员函数.它是一个外部 函数. 一个外部函数只能通过类的授权而成为友元函 数.
友元函数
类如何授权一个函数作为友元函数? 答:通过在类的定义中声明函数,并且在该函数 的声明前加上关键字friend,这样类和该函数之 间创建了友元关系.关键字friend不能够在类的 定义之外使用. 注:类的访问限定符(public,private和 protected)对友元函数是不起作用的. 内容对应教材:9.10节