c++——友元函数与友元类

一.概述
友元关系提供了不同对类或对象的成员函数,类的成员函数与一般函数之间之间进行的数据共享机制。通过友元关系,一个普通函数或者类的成员函数可以访问封装于另外一个类中的数据。利用关键字friend来声明友元关系。
二.类的友元函数
友元函数是在类中用关键字friend声明的非成员函数,友元函数可以是一个普通的函数也可以是其他类的成员函数。
友元函数是一般函数:
friend 类型名 函数名(参数表);
友元函数是另一个类的成员函数:
friend 类型名 另一个类名::函数名(参数表);
计算两点间距离的问题部分代码如下:

class point
{
public:
	point(int x,int y):x(x),y(y){}
	int getx()	{return x;}
	int gety()	{return y;}
	friend float caldist()point& p1,point& p2);//声明友元函数
private:
	int x,y;
};
friend  caldist(point& p1,point& p2)//友元函数实现
{
	float x=p1.x-p2.x;//访问point类的私有成员
	float y=p1.y-p2.y;
	return sqrt(x*x+y*y);
}	

三.友元类
class A
{
friend class B;
}
B类是A类友元,B的成员函数可以访问A类的私有和保护数据。
注意:
1.友元关系不能传递。
2.友元关系是单向的。 如上例,类A的成员函数不能访问B类的私有和保护数据。
3.友元关系不能被继承。 如果类B是类A的友元,类B的派生类并不会自动生成为类A的友元。

注:部分内容参考《c++语言程序设计(第四版)》清华大学出版社

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值