第七周任务二之点类(友元函数的应用)

来源:互联网 发布:淘宝网薄款女士羽绒服 编辑:程序博客网 时间:2024/05/01 07:33

源程序:

/*(文件注释头部开始) *程序的版权和版本声明部分 *Copyright (c) 2011,烟台大学计算机学院学生 *All rights reserved. *文件名称:平面坐标点类*作    者:114-3张宗佳 *完成日期:2012年04月02号 *版本号:vc.3* 对任务及求解方法的描述部分 * 输入描术:输入坐标点* 问题描述:你需要完成的任务是,利用成员函数、友元函数和一般函数,实现三个版本的求两点间距离的函数,* 并设计main()函数完成测试。此任务和上例的区别在于“距离是一个点和另外一个点的距离”,参数个数上有体现。* 程序输出:输出两点之间距离、到原点距离、关于坐标轴和原点的对称点等* 程序头部的注释结束 */  #include<iostream>#include<cmath>using namespace std;enum SymmetricStyle { axisx,axisy,point};//分别表示按x轴, y轴, 原点对称class CPoint{private:double x;  // 横坐标double y;  // 纵坐标public:CPoint(double xx = 0,double yy = 0);double Distance1(CPoint p) ;   // 两点之间的距离(一点是当前点,另一点为参数p)friend double Distance2(CPoint &);double getx(){return x;}double gety(){return y;}void input();};double Distance3(CPoint &);CPoint::CPoint(double xx,double yy):x(xx),y(yy){}// 两点之间的距离(一点是当前点,另一点为参数p)// 成员函数的实现,Distance前加Cpoint::,以x,y的形式直接访问私有数据成员double CPoint::Distance1(CPoint p){return(sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)));}//友元函数的实现,double Distance2(CPoint &p){CPoint p1;cout << "请输入一个点" ;p1.input();return(sqrt((p1.x - p.x) * (p1.x - p.x) + (p1.y - p.y) * (p1.y - p.y)));}//普通函数的实现double Distance3(CPoint &p){CPoint p1;cout << "请输入一个点" ;p1.input();return(sqrt((p1.getx() - p.getx()) * (p1.getx() - p.getx()) + (p1.gety() - p.gety()) * (p1.gety() - p.gety())));} //以x,y 形式输入坐标点void CPoint::input(){char c;cout << "格式:(x,y):" ;cin >> x >> c >> y;while(1){if(c != ','){cout << "格式出错请重输!" << endl;}else break;}return ;}void main(){CPoint p1,p2;cout << "输入第一个点p1:" ;p1.input();cout << "输入第二个点p2:";p2.input();cout << "这两点之间的距离是:" << p1.Distance1(p2) << endl;//调用成员函数cout << "这两点之间的距离是:" << Distance2(p1) << endl;//友元函数的调用cout << "这两点之间的距离是:" << Distance3(p1) << endl;//普通函数的调用system("pause");}


实验结果:

经验积累:

1.友元函数,一关键字friend声明,一个类的友元函数可以访问这个类中的私有成员,就像其实贺老可以去我家吃面.....

2.需要注意的是,友元函数并不属于类的成员函数,在访问类内的数据成员时,必须制定一个要访问的对象,通过制定的对象来访问私有数据成员

3.而普通函数只能通过调用类的成员函数来访问类的私有成员

上机感言:

好友元,好朋友~

 

原创粉丝点击