(1)友元函数
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
//声明全局函数PointDistance是Point类的一个友元函数。
friend double PointDistance(Point &p1,Point&p2);
Point(int x,int y)
{
this->x = x;
this->y = y;
}
int getX()
{
return this->x;
}
int getY()
{
return this->y;
}
private:
int x;
int y;
};
double PointDistance(Point &p1,Point&p2)
{
double dis;
int dd_x = p1.getX() - p2.getX();//有压栈出栈开销
int dd_y = p1.y - p2.y;//使用友元函数,可以访问类中私有成员
dis = sqrt(dd_x*dd_x + dd_y*dd_y);
return dis;
}
int main()
{
Point p1(1,2);
Point p2(2,2);
cout << "两点间的距离是:" << PointDistance(p1,p2) << endl;
return 0;
}
(2)友元类:
#include<iostream>
using namespace std;
class A
{
public:
A(int a)
{
this->a = a;
}
//申明一个友元类B
friend class B; //友元关系是单向的
private:
int a;
};
class B
{
public:
B(int b)
{
this->b = b;
}
void printB()
{
A objA(100);
cout << objA.a << endl;
cout << "b = " << this->b << endl;
}
private:
int b;
};
int main()
{
B b(200);
b.printB();
cout << "" << endl;
return 0;
}
总结:
使用友元函数,可以访问类中私有成员,可以省去使用getter,setter方法及其产生的压栈出栈开销。
友元关系是单向的,且友元关系不能被继承。