• 第六周项目5-友元类


    定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)。

    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年04月16日
    * 版本号:v1.0
    */
    #include<iostream>
    #include <cmath>
    using namespace std;
    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;
    };
    //下面定义两个类中的成员函数,要求不得再增加成员函数
    //注意体会在Time的成员函数中可以调用Date类的私有数据成员
    int day(int,int);
    Time::Time(int h,int m,int s)
    {
        hour=h;
        minute=m;
        sec=s;
    }
    Date::Date(int m,int d,int y)
    {
        month=m;
        day=d;
        year=y;
    }
    void Time::add_a_second(Date &d)
    {
        sec++;
        if (sec>60)
        {
            minute++;
            sec=1;
        }
        if (minute>60)
        {
            hour++;
            minute=1;
        }
        if (hour>24)
        {
            d.day++;
            hour=1;
        }
        if (d.day>day(d.month,d.year))
        {
            d.month++;
            d.day=1;
        }
        if (d.month>12)
        {
            d.year++;
            d.month=1;
        }
    }
    void Time:: display(Date &d)
    {
        cout<<d.month<<"/"<<d.day<<"/"<<d.year<<" "<<hour<<":"<<minute<<":"<<sec<<endl;
    }
    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;
    }
    int day(int m, int y)    // 一年中的第几天
    {
        int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0 && y % 100 == 0))
            a[1]=29;
        return a[m-1];
    }
    
    运行结果:


    @ Mayuko

  • 相关阅读:
    序列化组件
    restful_framework之视图组件
    如何优化MYSQL数据库
    pycharm如何显示工具栏
    cmd常用命令
    pycharm如何回到过去某个时间
    RESTful API设计规范
    MyBatis之传入参数——parameterType(转)
    Spring3事务管理——使用@Transactional 注解(转)
    Eclipse 启动问题:'Initilizing Java Tooling' has encountered a problem(。。。)
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567507.html
Copyright © 2020-2023  润新知