1、概念
(1)类很好地实现了封装和隐藏,一个类里的私有成员和保护成员只能由类内部的成员函数访问,外部不能通过对象直接访问。但有时为了提高编程效率,需要允许一个函数或类访问,另外一个类中的私有成员或保护成员,这时可将这些类或函数声明为类的友元。
(2)友元函数不是类的成员函数,在函数体中使用不能用“对象名.对象成员名”
(3)友元函数在被访问类中的声明格式:
friend <返回值类型<函数名><(参数表)>
【示例】
#include<iostream>
#include<cmath>
using namespace std;
class Pixel; //前向引用声明
class Test
{
public:
void printX(Pixel p);
};
class Pixel
{
private :
int X,y;
public:
Pixel(int x0,int y0)
{
x= X0;
y=y0;
}
void printxy()
{
cout<<"pixe1:("<<x<<","<<y<<")"<<end1;
}
friend double getDist(Pixel pl,Pixel p2); //友元函数,全局函数
friend void Test::printX(Pixel p); //类Test的成员函数为本类的友元函数
};
void Test::printX(Pixel p)
{
cout<<"x="<<p.x<<" ty="<<p.y<<endl;
return;
}
double getDist(Pixel pl,Pixel p2) //友元函数在类体外定义
{
double xd = double(pl.x