第七週實驗報告(二)利用成員函數、友元函數和一般函數求兩點之間距離

/* (程序頭部註釋開始)

* 程序的版權和版本聲明部分

* 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();

                友元函數介於成員函數和一般函數之間,友元函數可以直接調用私有成員不必再通過函數調用來取值。




發佈了55 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章