/* Copyright (c) 2016
* All rights reserved
* 文件名称:3.cpp
* 作者:刘丽
* 完成日期:2016年 4 月 7日
* 版本号: v1.0
*
* 问题描述:使用成员函数、友元函数和一般函数的区别(两点间距离)
*/
#include <iostream>
#include<cmath>
using namespace std;
double distance1(class CPoint &a,class CPoint &b );
class CPoint
{
private:
double x; // 横坐标
double y; // 纵坐标
public:
CPoint(double xx=0,double yy=0):x(xx),y(yy){};
friend double distance1( CPoint &, CPoint & );//友元函数
CPoint(const CPoint &a);
double distance2(const CPoint &b);//成员函数
};
CPoint::CPoint(const CPoint &a)
{
x=a.x;
y=a.y;
}
double CPoint::distance2(const CPoint &b)
{
double sum;
sum=(x-b.x)*(x-b.x)+(y-b.y)*(y-b.y);
return sqrt(sum);
}
int main()
{
CPoint p1(1,20),p2(8,99);
int x1=1,y1=20,x2=8,y2=99;
double answer;
double distance3(int,int ,int,int);
answer=distance1(p1,p2);//友元函数
cout<<"answer="<<answer<<endl;
answer=distance3(x1,x2 ,y1,y2);//一般函数
cout<<"answer="<<answer<<endl;
answer=p1.distance2(p2);//成员函数
cout<<"answer="<<answer<<endl;
return 0;
}
double distance1( CPoint &a, CPoint &b )
{
double sum;
sum=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
return sqrt(sum);
}
double distance3(int x1,int x2 ,int y1,int y2)//一般函数
{
double sum;
sum=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
return sqrt(sum);
}
心得:
类只开放他的成员函数,若想使用他的成员变量需要用到友元函数。