/*
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 张传新
* 完成日期:2012 年04月02 日
* 版 本 号:1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:使用成员函数、友元函数和一般函数的区别
* 程序输出:
* 问题分析:……
* 算法设计:……
*/
#include<iostream> #include<cmath> using namespace std; class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=1,double yy=2):x(xx),y(yy){} double Distance1(CPoint p,CPoint q); // 两点之间的距离 friend double Distance2(CPoint p,CPoint q); //友元函数声明 int getx(){return x;} int gety(){return y;} void input(); //以x,y 形式输入坐标点 void output(); //以(x,y) 形式输出坐标点 }; double Distance3(CPoint p,CPoint q); //一般函数声明 void main() { CPoint a1; CPoint a2; a1.input(); a1.output(); a2.input(); a2.output(); a1.Distance1(a1,a2); Distance2(a1,a2); Distance3(a1,a2); system("pause"); } void CPoint::input() { char a; cout<<"请以“x,y ”形式输入坐标点:"<<endl; cin>>x>>a>>y; if(a!=',') { exit(0); } } //以(x,y) 形式输出坐标点 void CPoint::output() { cout<<"("<<x<<","<<y<<")"<<endl; } // 两点之间的距离(一点是当前点,另一点为参数p) double CPoint::Distance1(CPoint p,CPoint q) //成员函数的实现,Distance1前加CPoint:: { cout<<"两点的距离为:"<<endl; cout<<sqrt((q.x-p.x)*(q.x-p.x)+(q.y-p.y)*(q.y-p.y))<<endl; return 0; } double Distance2(CPoint p,CPoint q)//友元函数的实现,Distance2前不加CPoint::,并不是类的成员函数 { cout<<"两点的距离为:"<<endl; cout<<sqrt((q.x-p.x)*(q.x-p.x)+(q.y-p.y)*(q.y-p.y))<<endl; return 0; } double Distance3(CPoint p,CPoint q)//只能用公共接口q.getx()形式访问私有数据成员 { cout<<"两点的距离为:"<<endl; cout<<sqrt((q.getx()-p.getx())*(q.getx()-p.getx())+(q.gety()-p.gety())*(q.gety()-p.gety()))<<endl; return 0; }
运行结果:
经验积累:
1.三个版本的求两点之间的距离的函数,让我对于这三种函数的使用更加明确。
上机感言:friend函数使两个“人”之间的关系更加密切。。。