Time.tick()【exercise17.7】

写出Time的成员函数tick,实现时间按秒数增加,并输出一段给定时长的时间变化.

//Time.h
#ifndef TIME_H
#define TIME_H
class Time{
    public:
        Time(int=23,int=59,int=55);
        
        //get functions
        int getHour();
        int getMinute();
        int getSecond();
        
        //set functions
        void setTime(int,int,int);
        void setHour(int);
        void setMinute(int);
        void setSecond(int);
        
        void printUniversal();
        void printStandard();
        
        void tick(double);
        private:
        void increment();//utility function 
        int hour;
        int minute;
        int second;
};
#endif        

 

//Time.cpp
#include"Time.h" #include<iostream> #include<stdexcept> #include<iomanip> #include<ctime>//用到clock、time、localtime、asctime函数、宏定义CLOCKS_PER_SEC using namespace std; Time::Time(int hour,int minute,int second){ setTime(hour,minute,second); } int Time::getHour(){ return hour; } int Time::getMinute(){ return minute; } int Time::getSecond(){ return second; } void Time::setHour(int h){ if(h>=0&&h<=23){ hour=h; }else{ throw invalid_argument("invalid input of hour\n"); } } void Time::setMinute(int m){ if(m>=0&&m<=59){ minute=m; }else{ throw invalid_argument("invalid input of minute\n"); } } void Time::setSecond(int s){ if(s>=0&&s<=59){ second=s; }else{ throw invalid_argument("invalid input of second\n"); } }
void Time::setTime(int h,int m,int s){ setHour(h); setMinute(m); setSecond(s); }

void Time::printStandard(){ cout<<setfill('0')<<setw(2) <<((getHour()==0||getHour()==12)?12:getHour()%12)<<":" <<setw(2)<<getMinute()<<":" <<setw(2)<<getSecond()<<((getHour()>12)?" PM":" AM")<<endl; } void Time::printUniversal(){ cout<<setfill('0') <<setw(2)<<getHour()<<":" <<setw(2)<<getMinute()<<":" <<setw(2)<<getSecond()<<endl; } void Time::tick(double lastingMinute){//lastingMinute是想要持续输出的时间 double now,last=0; while(1){ printStandard();//也可以放入下一个if中,让程序隔一秒再输出一次 now=(double)clock()/CLOCKS_PER_SEC;//clock返回执行程序已过去的“滴答”数//CLOCK_PER_SEC是每秒的“滴答”数 if(now-last>=1){//时间过了1秒 increment();//second加1 last=now;//更新时间 } if(now>lastingMinute*60){ break; } } } void Time::increment(){ if(second==59){ if(minute==59){ if(hour==23){ setHour(0); setMinute(0); setSecond(0); }else{ setHour(hour+1); setMinute(0); setSecond(0); } }else{ setSecond(0); setMinute(minute+1); } }else{ setSecond(second+1); } }

运行测试

#include "Time.h"
using namespace std;

int main() {
    Time t;
    Time test;
    test.tick(0.1);//0.1分钟的输出
}

 

posted @ 2021-03-02 10:11  NoerForest  阅读(160)  评论(0)    收藏  举报