/*(文件註釋頭部開始)
*程序的版權和版本聲明部分
*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.通過這個實驗真正的理解了成員,友元,普通的區別,儘管這個程序相比其他的程序簡單,但收穫是最大的。