01.#include <iostream> 02.using namespace std; 03.class Time 04.{public: 05. Time(int h,int m,int s):hour(h),minute(m),sec(s){} 06. void display1(); //成員函式宣告 07. friend void display2(Time &); //友元函式宣告 08. int getHour(){return hour;} 09. int getMinute(){return minute;} 10. int getSec(){return sec;} 11. private: 12. int hour; 13. int minute; 14. int sec; 15.}; 16.void display3(Time &); //一般函式宣告 17. 18.void Time::display1() //成員函數的實現,dispaly1前加Time:: 19.{ //以hour形式直接存取私人資料成員,實質是this->hour形式 20. cout<<hour<<":"<<minute<<":"<<sec<<endl; 21.} 22.void display2(Time &t) //友元函數的實現,dispaly2前不加Time::,並不是類的成員函數 23.{ //不是類的成員函數,卻可以t.hour的形式直接存取私人資料成員——友元 24. cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl; 25.} 26.void display3(Time &t) //一般函數的實現,dispaly1前加Time:: 27.{ //只能用公用介面t.getHour()形式訪問私人資料成員 28. cout<<t.getHour()<<":"<<t.getMinute()<<":"<<t.getSec()<<endl; 29.} 30.int main() 31.{ Time t1(10,13,56); 32. t1.display1(); //成員函數這樣調用 33. display2(t1); //友員函數調用和一般函數無異 34. display3(t1); //一般函數的調用 35. system("pause"); 36. return 0;
需要完成的任務是,利用成員函數、友元函數和一般函數,實現三個版本的求兩點間距離的函數,並設計main()函數完成測試。此任務和上例的區別在於“距離是一個點和另外一個點的距離”,參數個數上有體現。下面是點類的部分代碼。01.class CPoint 02.{private: 03. double x; // 橫座標 04. double y; // 縱座標 05. public: 06. CPoint(double xx=0,double yy=0):x(xx),y(yy){} 07. ……//請繼續寫需要的代碼 解答
01.#include<iostream> 02.#include<Cmath> 03. 04.using namespace std; 05. 06.class CPoint 07.{ 08.private: 09. 10. double x; 11. double y; 12. 13.public: 14. 15. CPoint( double xx = 0, double yy = 0 ) : x(xx), y(yy){} 16. double Distance1 ( CPoint & ) const; //成員函式宣告 17. friend double Distance2 ( const CPoint &, const CPoint & ); //友元函式宣告 18. double getX() { return x;} 19. double getY() { return y;} 20.}; 21. 22.double Distance3 ( CPoint &, CPoint & ); //一般函式宣告 23. 24.double CPoint::Distance1 ( CPoint &p ) const 25.{ 26. double dx = p.x - x, dy = p.y - y; 27. 28. return sqrt ( dx * dx + dy * dy) ; 29. 30.} 31. 32.double Distance2 ( const CPoint &X, const CPoint &Y ) 33.{ 34. double dx = X.x - Y.x, dy = X.y - Y.y; 35. 36. return sqrt ( dx * dx + dy * dy ); 37. 38.} 39. 40.double Distance3 ( CPoint &d1, CPoint &d2 ) 41.{ 42. 43. double dx = d1.getX() - d2.getX(), dy = d1.getY() - d2.getY(); 44. 45. return sqrt ( dx * dx + dy * dy ); 46. 47.} 48. 49.int main () 50.{ 51. CPoint a1(2,4), a2(1,3); 52. 53. cout << "以成員函數輸出" << a1.Distance1(a2) << endl; 54. 55. cout << "以友元函數輸出" << Distance2(a1,a2) << endl; 56. 57. cout << "以一般函數輸出" << Distance3(a1,a2) << endl; 58. 59. system ("pause"); 60. 61. return 0; 62.}