if控制满足条件不执行(在有注解的地方)
#include<iostream.h>
#ifndef TIME_H
#define TIME_H
class Time{
public:
Time(int =0,int =0,int =0,int =0,int =0,int =0);
void settime(int,int,int,int,int,int);
void sethour(int);
void setminute(int);
void setsecond(int);
int gethour();
int getminute();
int getsecond();
void printstandard();
void nextday();
void date();
private:
int hour;
int minute;
int second;
int month;
int day;
int year;
};
#endif
#include <iostream.h>
#include"time.h"
Time::Time(int hr,int min,int sec,int m,int d,int y)
{settime(hr,min,sec,m,d,y);}
void Time::settime(int h,int m,int s,int ma,int da,int ye)
{
sethour(h);
setminute(m);
setsecond(s);
month=(ma>=1&&ma<=12)?ma:1;
day=(da>=1&&da<=30)?da:1;
year=ye;
}
void Time::sethour(int h)
{hour=(h>=0&&h<24)?h:0;}
void Time::setminute(int m)
{minute=(m>=0&&m<60)?m:0;}
void Time::setsecond(int s)
{second=(s>=0&&s<60)?s:0;}
int Time::gethour(){return hour;}
int Time::getminute(){return minute;}
int Time::getsecond(){return second;}
void Time::printstandard()
{
cout<<((hour==0||hour==12)?12:hour%12)
<<":"<<(minute<10?"0":"")<<minute
<<":"<<(second<10?"0":"")<<second
<<(hour<12?"AM":"PM")<<endl;
}
void Time::date()
{cout<<month<<'-'<<day<<'-'<<year<<endl;}
void tick(Time &,int);
int main()
{
Time t;
t.settime(12,59,58,12,30,1999);
tick(t,3);
return 0;
}
void tick(Time &tt,int count)
{
cout<<"tick second "<<count
<<" time:\nstart time: ";
tt.printstandard();
for(int i=0;i <count;i++)
{
tt.setsecond((tt.getsecond()+1)%60);
if(tt.getsecond()==0)
tt.setminute((tt.getminute()+1)%60);
if(tt.getminute()==0&&tt.getsecond()==0)
tt.sethour((tt.gethour()+1)%24);
if(tt.getminute==0&&tt.gethour()==1&&tt.getsecond()==0)//就是这行,如果只是getsecond()==0,日月年可以变,
//但是像上面那样3个一起就不行了。但是输出表明时间都变了,但是就是调用不了tt.nextday(),不清楚为什么。
tt.nextday();
tt.date();
cout<<"\nsecond+1: ";
tt.printstandard();
}
cout <<endl;
}
void Time::nextday()
{
day++;
if(day>=30)
{
month++;
day=1;
}
if(month>=12)
{
month=1;
year++;
}
}