#include<iostream> 
#include<cmath>    
using namespace std;    
class Point    
{    
public:    
Point(double xx,double yy)    
{    
x=xx;    
y=yy;    
};    
void Getxy();    
friend double Distance(Point&a,Point&b);    
private:    
doublex,y;    
};    
void Point::Getxy()    
{    
cout<<"("<<x<<","<<y<<")"<<endl;    
}    
double Distance(Point&a,Point&b)    
{    
double dx=a.x-b.x;    
double dy=a.y-b.y;    
return sqrt(dx*dx+dy*dy);    
}    
int main(void)    
{    
Point p1(3.0,4.0),p2(6.0,8.0);    
p1.Getxy();    
p2.Getxy();    
double d=Distance(p1,p2);    
cout<<"Distanceis"<<d<<endl;    
return 0;    
}
说明:在该程序中的Point类中说明了一个友元函数Distance(),它在说明时前边加friend关键字,标识它不是成员函数,而是友元函数。它的定义方法与普通函数定义一样,而不同于成员函数的定义,因为它不需要指出所属的类。但是,它可以引用类中的私有成员,函数体中a.x,b.x,a.y,b.y都是类的私有成员,它们是通过对象引用的。在调用友元函数时,也是同普通函数的调用一样,不要像成员函数那样调用。本例中,p1.Getxy()和p2.Getxy()这是成员函数的调用,要用对象来表示。而Distance(p1, p2)是友元函数的调用,它直接调用,不需要对象表示,它的参数是对象。(该程序的功能是已知两点坐标,求出两点的距离。)
原文地址:http://www.cnblogs.com/vonk/p/3862256.html