类具有封装和隐藏的特性,只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是,如果将数据成员都定义为公有的,这又破坏了隐藏的特性。 另外,应该看到,在某些情况下,特别是在某些成员函数多次被调用时,由于参数传递、类型检查、安全检查等都需要时间开销,会影响程序的效率。
为了解决上述问题,提出一种友元的方案。 友元函数是一种定义在类外部的普通函数,但它需要在类体内进行说明, 在说明时需要加上关键字friend,以与类的其他成员函数相区别。
友元函数不是成员函数,但是可以访问类的私有成员,友元函数的作用在于提高程序的运行效率,但是破坏了类的封装性隐藏性。
class Point
{
private:
float x;
float y;
public:
Point(float a=0.0, float b=0.0):x(a),y(b){}
friend float dis(Point& left,Point& right);
};
///.cpp
float dis(Point& left,Point& right)
{
return pow( (pow((left.x-right.x),2) + pow((left.y-right.y),2)),0.5 ) ;
}