C++ 时钟模拟(继承)

题目描述
定义计数器类,包含保护数据成员value,公有函数increment计数加1。

定义循环计算器继承计数器类,增加私有数据成员:最小值min_value,最大值max_value,

重写公有函数increment,使得value在min_value~max_value区间内循环+1。

定义时钟类,数据成员是私有循环计数器对象小时hour、分钟minute、秒second,公有函数time(int s)计算当前时间经过s秒之后的时间,即hour,minute,second的新value值。

定义时钟类对象,输入当前时间和经过的秒数,调用time函数计算新时间。

根据题目要求,增加必要的构造函数、析构函数和其他所需函数。

因为clock是系统内置函数,为了避免重名,请不要使用clock作为类名或者函数名

输入
第一行测试次数n

2行一组,第一行为当前时间(小时 分钟 秒),第二行为经过的秒数。

输出
输出n行

每行对应每组当前时间和经过秒数后计算得到的新时间(小时:分钟:秒)。

样例输入 2
8 19 20
20
23 30 0
1801
样例输出
8:19:40
0:0:1

#include
#include 
using namespace std;
class counter{
	protected:
		int value;
	public:
		counter(int v):value(v){	}
		void increment(){
			value+=1;	
		} 
}; 
class circulation:public counter{
	private:
		int min_value,max_value;
	public:
		circulation(int v,int min_v,int max_v):counter(v){
			min_value=min_v;
			max_value=max_v;
		}
		void increment(){
			if(value+1==max_value)	//如果值+1为最大,变为最小值达到循环目的 
			value=min_value;	
			else
			value+=1;		 
		}
		int getValue(){	return 	value;	}
};
class Clock{
	private:
		circulation hour,minute,second;
	public:
		Clock(int h,int m,int s):hour(h,0,24),minute(m,0,60),second(s,0,60){	}
		void time(int s){
			while(s--){		 //重复相加 
				second.increment();
				if(second.getValue()==0){ 	//如果秒+1过后=0,说明分需要进位 
				minute.increment();
				if(minute.getValue()==0)	//同理 
				hour.increment(); 
				} 
			}
		}
		void print(){
			cout<<hour.getValue()<<":"<<minute.getValue()<<":"<<second.getValue()<<endl;
		}
}; 
int main(){
	int n,hour,minute,second;
	cin>>n;
	while(n--){
		cin>>hour>>minute>>second;
		Clock c1(hour,minute,second);
		cin>>second;
		c1.time(second);
		c1.print();
	}
	return 0;
}

C++ 时钟模拟(继承)_第1张图片

你可能感兴趣的:(C++ 时钟模拟(继承))