您的位置:首页 > 编程语言 > C语言/C++

C++友元

2014-07-03 10:45 204 查看
· 友元是C++提供的一种破环数据封装和数据隐藏的机制。

· 为了确保数据的完整性,以及数据封装和隐藏的原则,尽量不使用或少使用友元。

· 作用:增加灵活性,使程序员可以在封装和快速性方面做出合理选择。

· 友元关系是单向的,但是不能传递。

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();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: