C++友元

·  友元是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();}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值