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.}