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分钟的输出 }
Look, if you had one shot , one opportunity , to seize everything you ever wanted , in one moment.
Would you captrue it , or just let it slip ?

浙公网安备 33010602011771号