第七週實驗報告(二)

/*(文件註釋頭部開始) 
*程序的版權和版本聲明部分 
*Copyright (c) 2011,煙臺大學計算機學院學生 
*All rights reserved. 
*文件名稱:平面座標點類
*作    者:李騰
*完成日期:2012年4月3號 
*版本號:
* 對任務及求解方法的描述部分 
* 輸入描術:輸入座標點
* 問題描述:你需要完成的任務是,利用成員函數、友元函數和一般函數,實現三個版本的求兩點間距離的函數,
* 並設計main()函數完成測試。此任務和上例的區別在於“距離是一個點和另外一個點的距離”,參數個數上有體現。
* 程序輸出:輸出兩點之間距離、到原點距離、關於座標軸和原點的對稱點等
* 程序頭部的註釋結束 
*/  
#include<iostream>
#include<cmath>
using namespace std;
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)

double CPoint::Distance1(CPoint p)      // 成員函數的實現,Distance前加Cpoint::,以x,y的形式直接訪問私有數據成員
{
	return(sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)));
}
double Distance2(CPoint &p)   //友元函數的實現,Distance前不用加Cpoint::
{
	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())));
}


void CPoint::input()  //以x,y 形式輸入座標點
{
	char c;

	cout << "格式:(x,y):" ;

	cin >> x ;

	cin >> c ;

	cin >> y ;

	while(1)
	{
		if(c != ',')
		{
			cout << "格式出錯請重輸!" << endl;
		}
		else break;
	}
}

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.友元函數是函數的朋友,我們程序員也是,將程序代碼作爲我們的朋友,我就可以隨便的利用它了,這就是友元函數,也是我們程序員要追求的。
      2.我想真正的在輸入時(x,y)但是就是不好使呢,哭了····
      3.通過這個實驗真正的理解了成員,友元,普通的區別,儘管這個程序相比其他的程序簡單,但收穫是最大的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章