1.友元是一种定义在类外部的普通函数,但它需要在类体内进行说明。
2.为了与该类的成员函数加以区别,在说明时前面加以关键字friend。
3.友元不是成员函数,但是它可以访问类中的私有成员。
4.友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,
使得非成员函数可以访问类的私有成员。
下面是示例代码,复制粘贴到你的编译器即可调试
# include <math.h>
# include <iostream.h>
class Point
{
public:
Point(double xx,double yy)
{
x = xx;
y = yy;
}
friend double Distance(Point & a,Point & b);
private:
double x;
double y;
};
//不需要double Point::Distance(Point & a,Point & b),因为它不是类的成员函数。
double Distance(Point & a,Point & b)
{
//a.x代表可以访问类的私有成员,实际上如果它不是在友元函数,类的实例(即对象)是不
//能访问该类的私有成员,Point oPoint; oPoint.a是错误的。只有成员函数才能访问私有成员。
//所以只要你把之前的friend去了,那么譬如a.x都是会报“a 是不可访问的”的错。
double dx = a.x - b.x;
double dy = a.y - b.y;
return sqrt(dx*dx + dy*dy);
}
void main()
{
Point p1(3.0,4.0);
Point p2(6.0,8.0);
//invoke也是直接invoke,不需要用什么对象。
double d = Distance(p1,p2);
cout<<"Distance is "<<d<<endl;
}