7.【项目 1-成员函数、友元函数和一般函数有区别】

来源:互联网 发布:wer机器人编程 编辑:程序博客网 时间:2024/04/28 12:50
【项目 1-成员函数、友元函数和一般函数有区别】
(1)阅读下面的程序,体会注释中的说明(要运行程序,请找到课程主页并复制代码)
//例:使用成员函数、友元函数和一般函数的区别
#include  <iostream>using  namespace  std;class  Time{public:Time(int  h,int  m,int  s):hour(h),minute(m),sec(s)  {}void  display1();//display1是成员函数friend  void  display2(Time  &);   //display2是友元函数int  getHour(){return  hour;}int  getMinute(){return  minute;}int  getSec(){return  sec;}private:int  hour;int  minute;int  sec;};void  Time::display1()   //成员函数 display1的实现,dispaly1前加    Time::{//以 hour形式直接访问私有数据成员,实质是 this->hour形式cout<<hour<<":"<<minute<<":"<<sec<<endl;}void  display2(Time  &t)   //友元函数 dispaly2的实现,不加  Time::,友元并不是类的成员{//虽然不是类的成员函数,却可以用 t.hour的形式直接访问私有数据成员——这就是友元cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}void  display3(Time  &t)   //display3是一般函数,dispaly3前不加    Time:://不能直接访问,只能用公共接口 t.getHour()形式访问私有数据成员cout<<t.getHour()<<":"<<t.getMinute()<<":"<<t.getSec()<<endl;int  main(){Time  t1(10,13,56);t1.display1();display2(t1);display3(t1);return  0;//成员函数这样调用:对象名.函数名()//友员函数的调用和一般函数无异(但实现中可以不同)//一般函数的调用}


(2)模仿上面的示例,完成求点类中距离的任务。你需要实现求距离函数的三种版本:分别利用成
员函数、友元函数和一般函数求两点间距离的函数,并设计 main()函数完成测试。
提示:此项目和例子的区别在于“距离是一个点和另外一个点的距离”,不同版本在参数上有
体现。三个版本建议分开测试,也可以如示例,放在一个程序中完成。
下面是点类的部分代码。
#include <iostream>#include <cmath>using namespace std;class  CPoint{private:double  x;   //横坐标double  y;   //纵坐标public:CPoint(double  xx=0,double  yy=0):x(xx),y(yy){}//请继续写需要的代码 double distance1(CPoint &);//friend double distence2(double  &,double &);double getX(){return x;}double getY(){return y;}};double CPoint::distance1(CPoint &p){    double dx=(x-p.x), dy=y-p.y;    return sqrt(dx*dx+dy*dy);}int main(){    CPoint p1(1,9),p2(2,6);        cout <<p1.distance1(p2)<<endl;    return 0;}


0 0