• 2015级C++第7周项目 友元、共享数据保护、多文件结构


    【项目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()函数完毕測试。

    提示:此项目和样例的差别在于“距离是一个点和另外一个点的距离”,不同版本号在參数上有体现。三个版本号建议分开測试,也能够如演示样例,放在一个程序中完毕。

      以下是点类的部分代码。

    class CPoint  
    {
    private:  
        double x;  // 横坐标  
        double y;  // 纵坐标  
     public: 
        CPoint(double xx=0,double yy=0):x(xx),y(yy){}  
        ……//请继续写须要的代码
    };

    【项目2-友元类】 參考解答
      定义以下两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计。将两个类的合并为一个DateTime,日期、时间都处理更好)

    class Date; //对Date类的提前引用声明
    class Time
    {
    public:
        Time(int,int,int);
        void add_a_second(Date &);  //添加1秒,1秒后可能会到了下一天,乃到下一月、下一年
        void display(Date &);  //显示时间,格式:月/日/年 时:分:秒
    private:
        int hour;
        int minute;
        int sec;
    };
    
    class Date
    {
    public:
        Date(int,int,int);
        friend class Time; //Time为Date的友元类
    private:
        int month;
        int day;
        int year;
    };
    
    int main( )
    {
        Time t1(23,59,32);
        Date d1(12,31,2013);   //測试时。再试试Date d1(2,28,2013)会怎样
        for(int i=0; i<=100; i++)
        {
            t1.add_a_second(d1);
            t1.display(d1);
        }
        return 0;
    }
    //以下定义两个类中的成员函数。要求不得再添加成员函数
    //注意体会在Time的成员函数中能够调用Date类的私有数据成员   

    【项目3-用多文件组织多个类的程序】 參考解答
      将上一周“项目2-带武器的游戏角色”用“一个项目多个文件”的方式实现,当中两个类的声明放在一个.h文件里,每一个类的成员函数分别放一个文件。main()函数用一个文件。体会这样安排的长处。

  • 相关阅读:
    零侵入性:循环重试功能
    Service有多个实现类,它怎么知道该注入哪个ServiceImpl类
    消息队列经典
    MyBatisplus
    图片存储服务器上
    Spring Boot 保护敏感配置的 4 种方法
    微服务组件
    Optional 实例
    date s 更改时间后不生效
    java运行时 报错 Error: Could not find or load main class test
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7258649.html
Copyright © 2020-2023  润新知