#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)是的调用,它直接调用,不需要对象表示,它的参数是对象。(该程序的功能是已知两点坐标,求出两点的距离。)