C++第三次实验

一、问题及代码

/* 文件名称:Exp—3.cpp 
* 作    者:刘旭 
* 完成日期:2016 年 4 月 22日 
* 版 本 号:v1.0 
* 对任务及求解方法的描述部分:通过有元类调用另一个类中的成员 
* 输入描述: 无 
* 问题描述:当时间增加一秒时看分时日月年的变化。 
* 程序输出: 略 
* 问题分析: 无 
* 算法设计: 无 
*/  
#include <iostream>  
using namespace std;  
class Date;  
class Time  
{  
public:  
    Time(int h,int m,int s):hour(h),minute(m),sec(s) {}  
    void add_a_second(Date &d1);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年  
    void display(Date &d1);  //显示时间,格式:月/日/年 时:分:秒  
private:  
    int hour;  
    int minute;  
    int sec;  
};  
class Date  
{  
public:  
    Date(int m,int d,int y):month(m),day(d),year(y) {}  
    friend class Time; //Time为Date的友元类  
private:  
    int month;  
    int day;  
    int year;  
};  
  
void Time::add_a_second(Date &d1)  
{  
    sec++;  
    if(sec>=60)  
    {  
        minute++;  
        sec%=60;  
    }  
    if(minute>=60)  
    {  
        hour++;  
        minute%=60;  
    }  
    if(hour>=24)  
    {  
        d1.day++;  
        hour%=24;  
    }  
  
    if(d1.month==2)  
    {  
        if(d1.year%4==0&&d1.year%100!=0||d1.year%400==0)  //判断  
        {  
            if(d1.day>=30)  
            {  
                d1.month++;  
                d1.day%=29;  
            }  
        }  
        else  
        {  
            if(d1.day>=29)  
            {  
                d1.month++;  
                d1.day%=28;  
            }  
        }  
    }  
    else if(d1.month==1||d1.month==3||d1.month==5||d1.month==7||d1.month==8||d1.month==10||d1.month==12)  
    {  
        if(d1.day>=32)  
        {  
            d1.month++;  
            d1.day%=31;  
        }  
    }  
    else  
    {  
        if(d1.day>=31)  
        {  
            d1.month++;  
            d1.day%=30;  
        }  
    }  
      
    if(d1.month>=13)  
    {  
        d1.year++;  
        d1.month%=12;  
    }  
}  
void Time::display(Date &d1)  
{  
    cout<<"时间变为:"<<d1.year<<":"<<d1.month<<":"<<d1.day<<":"<<hour<<":"<<minute<<":"<<sec<<endl;  
}  
int main( )  
{  
    Time t1(23,59,32); 
    Date d1(2,28,2013);   //测试时,试Date d1(2,28,2013)会如何  
    for(int i=0; i<=100; i++)  
    {  
        t1.add_a_second(d1);  
        t1.display(d1);  
    }  
    return 0;  
} 

二、运行结果


三、心得体会

感觉很难。

四、知识点总结

友元函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值