第7周任务2(成员函数,友元函数,一般函数的区别,以求两点距离为例)

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:                              
* 作    者:   臧鹏               
* 完成日期:   2012   年  4 月   2   日
* 版 本 号:          

* 对任务及求解方法的描述部分
* 输入描述: 
* 问题描述: 成员函数,友元函数,一般函数的区别,求一个点到另一个点的距离
* 程序输出: 
* 程序头部的注释结束
*/

#include <iostream>   
#include <cmath>   
using namespace std;//你需要完成的任务是,利用成员函数、友元函数和一般函数,实现三个版本的求两点间距离的函数,并设计main()函数完成测试。此任务和上例的区别在于"距离是一个点和另外一个点的距离",参数个数上有体现。下面是点类的部分代码。   
class CPoint    
{  
private:    
	double x;  // 横坐标     
	double y;  // 纵坐标     
public:   
	CPoint(double xx=0,double yy=0):x(xx),y(yy){}    
	double Distance1(CPoint p) ;   // 两点之间的距离(一点是当前点,另一点为参数p)   
	friend  double Distance3(CPoint &t1,CPoint &t2) ;   // 两点之间的距离   
	void input();  //以x,y 形式输入坐标点   
	double getx(){ return x;}        
	double gety(){ return y;}        
};  

// 输入坐标点     
void CPoint::input()    
{    
	char a;    
	cout<<"请输入坐标点(格式x,y ):";    
	while(1)    
	{    
		cin>>x>>a>>y;    
		if (a==',') break;    
		cout<<"输入的数据格式不符合规范,请重新输入\n";    
	}    
}  
// 求点到另一点的距离 

//成员函数定义   
double CPoint::Distance1(CPoint p)     
{    
	return sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));    
}    
//一般函数定义   
double Distance2(CPoint &t1,CPoint &t2)  
{  
	double x1,y1,x2,y2,h;  
	x1=t1.getx();  
	y1=t1.gety();  
	x2=t2.getx();  
	y2=t2.gety();  
	h=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));  
	return h;  
}  
// 友元函数定义   
double Distance3(CPoint &t1,CPoint &t2)  
{  
	double x1,y1,x2,y2,h;  
	x1=t1.x;  
	y1=t1.y;  
	x2=t2.x;  
	y2=t2.y;  
	h=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));  
	return h;  
}  
void main( )    
{    
	double distance;    
	CPoint p1,p2;    
	cout<<"请输入第1个点p1,";    
	p1.input();    
	cout<<"请输入第2个点p2,";    
	p2.input();    
	distance=p1.Distance1(p2);    
	cout<<"调用成员函数求得的两点的距离为:"<<distance<<endl;  
	distance=Distance2(p1,p2);  
	cout<<"调用一般函数求得的两点的距离为:"<<distance<<endl;  
	distance=Distance3(p1,p2);  
	cout<<"调用友元函数求得的两点的距离为:"<<distance<<endl;  
	system("pause");    
}  

经验积累:

程序中用到的三个函数中括号内都是引用,如果不想函数在调用过程中改变引用的成员函数的值,可以声明为const常引用,友元函数可以直接访问私有数据成员以 t.x 的形式

,一般函数要通过公用接口也就是公共函数才能访问私有数据成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值