第七周实验报告(二)利用成员函数、友元函数和一般函数求两点之间距离

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生 

* All rights reserved.

* 文件名称:利用成员函数、友元函数和一般函数求两点之间距离

*    者:        晁阳                      

* 完成日期:     2012     4          4  

* 号:       t1.0  

* 对任务及求解方法的描述部分

* 输入描述: 

* 问题描述: 

* 程序输出:

 * 程序头部的注释结束

*/

	#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 Distance2(CPoint &p1,CPoint &p2) ;   // 两点之间的距离  
	    void input();  //以x,y 形式输入坐标点  
	    double getx();    
	    double gety();    
	};  
	//返回坐标点  
	double CPoint::getx()    
	{    
	    return x;    
	}    
	double CPoint::gety()    
	{    
	    return y;    
	}    
	// 输入坐标点    
	void CPoint::input()    
	{    
	    char ch;    
	    cout<<"(输入坐标点(格式x,y )):";    
	    while(1)    
	    {    
	        cin>>x>>ch>>y;    
	        if (ch==',') break;    
	        cout<<"输入的数据格式不符合规范,请重新输入\n";    
	    }    
	}  
	// 求点到原点的距离    
	 
	double CPoint::Distance1(CPoint p)   //成员函数定义   
	{            
	    return sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));   
	}    
	//一般函数定义  
	double Distance3(CPoint &p1,CPoint &p2)  
	{  
	    double a,b,c,d;  
	    a=p1.getx();  
	    b=p1.gety();  
	    c=p2.getx();  
            d=p2.gety();   
	    return sqrt((a-c)*(a-c)+(b-d)*(b-d)); 
	}  
	// 友元函数定义  
	double Distance2(CPoint &p1,CPoint &p2)  
	{  
	    double a,b,c,d;  
	    a=p1.x;  
	    b=p1.y;  
	    c=p2.x;  
	    d=p2.y;    
	    return sqrt((a-c)*(a-c)+(b-d)*(b-d));
	}  
	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");    
	}  

上机感言:成员函数p.x   

                    友元函数p1.x 

                    一般函数p1.getx();

                友元函数介于成员函数和一般函数之间,友元函数可以直接调用私有成员不必再通过函数调用来取值。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
向量(综合型题目) (1)创建C# 控制台应用程序L4_2。 (2)在程序中创建一个向量CzVector,在其中定义一个double []型的私有字段_values,用于维护向量的各个元素值。 (3)为CzVector定义三个公有属性Length、Sum和Prod,分别用于返回向量的长度、向量所有元素的和以及向量所有元素的积。 (4)在CzVector中定义一个索引函数,用于获取或设置各个元素的值。 (5)为CzVector定义两个构造函数,一个根据指定长度对向量进行初始化(向量各元素取默认值0),另一个由指定的数组来构造向量并设置各元素的值。 (6)利用操作符重载来实现向量加法、减法和乘法。这三种运算均要两个向量的长度相等。设向量α=(a1,a2,…an) ,β=(b1,b2,…bn),那么α+β=(a1+b1,a2+b2,….,an+bn),减法与之似,而α*β=a1*b1+a2*b2+….+an*bn)。另外,一个向量还可以单独乘以一个系数(向量加法的重载形式),此时,λ*α=(λ*a1, λ*a2,…λ*an) 。以加法操作符重载为例,参考源代码如下: public static CzVector operator +(CzVector v1,CzVector v2) { if(v1.Length!=v2.Length) return null; CzVector result=new CzVector(v1.Length); for(int i=0;i<v1.Length;i++) result [i]=v1[i]+v2[i]; return result; } (7)似的,利用操作符重载来判断两个向量是否相等。向量相等的条件是:两个向量的长度相等,且各个位置上的对应元素值也相等。 (8)为CzVector定义一个ConsoleOutput方法,用于在控制台一行输出向量的所有元素,其之间以空格分割。 (9)在程序主方法中随机定义几个向量对象,并测试其运算结果。参考源代码如下: static void Main() { CzVector v1=new CzVector(1,-5,9,6); CzVector v2=new CzVector(0,1,2,3); Console.Write(“v1= “); v1.ConsoleOutput(); Console.Write(“v2= “); v2.ConsoleOutput(); CzVector v3=v1+v2; Console.Write(“v1+v2= “); v3.ConsoleOutput(); CzVector v4=v1-v2; Console.Write(“v1-v2= “); v4.ConsoleOutput(); Console.Write(“3*(v1+v2)= “); (v3*3).ConsoleOutput(); Console.Write(“v1*v2= “{0}”,v1*v2); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值