C++友元
2014-07-03 10:45
204 查看
· 友元是C++提供的一种破环数据封装和数据隐藏的机制。
· 为了确保数据的完整性,以及数据封装和隐藏的原则,尽量不使用或少使用友元。
· 作用:增加灵活性,使程序员可以在封装和快速性方面做出合理选择。
· 友元关系是单向的,但是不能传递。
1、普通函数作为友元函数
例:使用友元函数计算两点距离
2、友元成员函数
3、友元类
· 为了确保数据的完整性,以及数据封装和隐藏的原则,尽量不使用或少使用友元。
· 作用:增加灵活性,使程序员可以在封装和快速性方面做出合理选择。
· 友元关系是单向的,但是不能传递。
1、普通函数作为友元函数
例:使用友元函数计算两点距离
#include<iostream.h> #include<math.h> class Point { int x,y; public: Point(int xx=0,int yy=0){x=xx;y=yy;} int GetX(){return x;} int GetY(){return y;} friend float Distance(Point& a,Point& b); // 友元函数 } double Distance(Point& a,Point& b) { double dx=a.x-b.x; //double dx=a.GetX()-b.GetX(); double dy=a.y-b.y; //double dy=a.GetY()-b.GetY(); return sqrt(dx.dx+dy*dy); } int main() { Point p1(3.0,5.0),p2(4.0,6.0); double d=Distance(p1,p2); cout<<"The distance is "<<d<<endl; return 0 }
2、友元成员函数
class Student; class Teacher; { public: void assigGrades(Student& s); protected: int noofStudents; }; class Student { public: friend void Teacher::assigGrade(Student& s); //友元成员函数 protected: int semesterHours; float gpa; }; void Teacher::assigGrades(Student& s) {s.gpa=4.0}
3、友元类
class A { friend class B; public: void Display() {cout<<x<<endl;} private: int x; } class B { public: void Set(int i); void Display(); private: A a; } void B::Display() {a.x=1;} //直接调用A私有成员 void B::Display() {a.Display();}