
声明并实现一个Time类,表示时间。Time类包括:
int类型的私有数据成员hour、minute、second,表示时、分、秒。
带默认参数的构造函数,将时、分、秒设置为给定的参数。时、分、秒的默认参数值为0。需要检查时、分、秒的有效性。如果超出允许范围,则抛出invalid_argument("Invalid argument!")异常。
访问器函数getHour、getMinute和getSecond,分别用于访问时、分、秒。
成员函数setTime,用于同时修改时、分、秒。需要检查时、分、秒的有效性。如果超出允许范围,则抛出invalid_argument("Invalid argument!")异常。
重载自增运算符++,将时间递增1秒。要考虑增加1秒后,时间增加到下一分钟、下一小时、下一天的情况。要考虑前置++和后置++。
重载关系运算符==,判断两个时间是否相等。
使用类型转换函数,将时间转换为秒数。
重载流插入运算符<<,以24小时制格式输出时间,格式为时:分:秒。
【输入】
输入一行,有3个数据,分别表示时、分、秒,以空格间隔。
【输出】
见【输出示例】
【输入示例】
23 59 57
【输出示例】
t1:23:59:57
t2:00:00:00
t1:23:59:58
t2:23:59:57
t1 != t2
86398 【来源】
《程序设计基础——以C++为例》第6章实验5。
#include
#include
#include
using namespace std;
class Time {
private:
int hour, minute, second;
public:
Time(int hour = 0, int minute = 0, int second = 0) {
this->hour = hour;
this->minute = minute;
this->second = second;
if (second >= 60) {
throw invalid_argument("Invalid_argument!");
}
}
void setHour(int hour) {
this->hour = hour;
}
void setMinute(int minute) {
this->minute = minute;
}
void setSecond(int second) {
this->second = second;
}
int getHour() {
return hour;
}
int getMinute() {
return minute;
}
int getSecond() {
return second;
}
void setTime(int hour, int minute, int second) {
this->hour = hour;
this->minute = minute;
this->second = second;
}
Time operator++(int)//
{
//后使用
Time temp = *this;
this->second++;
if (second == 60) { //如果满60s了就进一位
second = 0;
minute += 1;
}
if (minute == 60) {
minute = 0;
hour = hour + 1;
}
if (hour == 24)
{
hour = 0;
}
this->hour;
this->minute;
return temp;
}
Time(const Time& str) {
this->hour = str.hour;
this->minute = str.minute;
this->second = str.second;
}
//Time& operator==(const Time& str)
bool operator==(const Time& str) {
if (this == &str) {
return 1;
}
return 0;
}
friend ostream& operator << (ostream& output, Time& c) {
output << setw(2) << setfill('0')<< c.hour << ":";
output << setw(2) << setfill('0') << c.minute << ":";
output << setw(2) << setfill('0') << c.second<> hour >> minute >> second;
try {
Time t1(hour, minute, second);
Time t2;
cout << "t1: ";
cout << t1;
cout << "t2: ";
cout << t2;
t2 = t1++;
cout << "t1: ";
cout << t1;
cout << "t2: ";
cout << t2;
if(t1 == t2)
cout << "t1 == t2" << endl;
else
cout << "t1 != t2" << endl;
int s = t1;
cout << s << endl;
}
catch(invalid_argument &ex) {
cout << ex.what() << endl;
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)