clock data 代码分享
include
include
using namespace std;
// 基础时钟类:保存时分秒,实现时间显示、秒累加进位
class Clock {
protected:
int h, m, s; // 时、分、秒
public:
// 构造函数:初始化时分秒,默认初始值0
Clock(int hh = 0, int mm = 0, int ss = 0) : h(hh), m(mm), s(ss) {}
// 打印时间:时:分:秒
void showTime() {
printf("%02d:%02d:%02d", h, m, s);
}
// 增加指定秒数,处理时分秒进位
// 返回值1:时间满24小时,需要日期+1;返回0:未跨天
int addSec(int sec) {
s += sec; // 先把增加的秒加到总秒数上
// 秒满60,进位到分钟
while (s >= 60) {
s -= 60;
m++;
}
// 分满60,进位到小时
while (m >= 60) {
m -= 60;
h++;
}
// 小时满24,清零小时,标记需要加一天
if (h >= 24) {
h -= 24;
return 1;
}
return 0;
}
};
// 题目(5):继承Clock,实现12小时制、带AM/PM的时钟
class NewClock : public Clock {
public:
// 派生类构造,调用父类Clock构造初始化时分秒
NewClock(int hh = 0, int mm = 0, int ss = 0) : Clock(hh, mm, ss) {}
// 重写显示函数:12小时制 + AM/PM
void showTime() {
string ap = h < 12 ? "AM" : "PM"; // 小于12点上午,否则下午
int tmp = h % 12; // 对12取模转换成12小时制
if (tmp == 0) tmp = 12; // 0点转为12点
printf("%02d:%02d:%02d %s\n", tmp, m, s, ap.c_str());
}
};
// 日期类:保存年月日,实现日期显示、天数+1
class Date {
protected:
int y, mo, d; // 年、月、日
public:
// 构造函数:初始化年月日,默认2025-01-01
Date(int yy = 2025, int mm = 1, int dd = 1) : y(yy), mo(mm), d(dd) {}
// 输出日期格式:年-月-日
void showDate() {
printf("%d-%02d-%02d ", y, mo, d);
}
// 日期自增一天(简易版,不处理大小月、闰年)
void addDay() {
d++;
}
};
// 题目(6):多重继承Clock和Date,带日期的时钟,支持增加秒数
class ClockWithDate : public Clock, public Date {
public:
// 构造:同时初始化时间(时分秒)和日期(年月日)
ClockWithDate(int h = 0, int mi = 0, int s = 0, int y = 2025, int m = 1, int d = 1)
: Clock(h, mi, s), Date(y, m, d) {
}
// 对外接口:增加若干秒,自动处理时间进位、跨天改日期
void addSecond(int n) {
int needAddDay = addSec(n); // 调用父类Clock加秒,获取是否跨天
if (needAddDay == 1) {
addDay(); // 跨天则日期+1
}
}
// 一次性输出:日期 + 时间
void show() {
showDate();
showTime();
cout << endl;
}
};
int main() {
cout << "2547102069王轶菲" << endl;
// =测试题目5:NewClock 带AM/PM时钟=
cout << "NewClock测试:\n";
NewClock a(9, 10, 20); // 上午9点10分20秒
NewClock b(15, 3, 5); // 下午3点03分05秒
a.showTime();
b.showTime();
// =测试题目6:带日期时钟,增加秒数功能=
cout << "\nClockWithDate加秒测试:\n";
// 初始:2025-5-20 23:59:50
ClockWithDate c(23, 59, 50, 2025, 5, 20);
cout << "初始:";
c.show();
c.addSecond(20); // 增加20秒,时间跨过24点,日期+1
cout << "加20秒:";
c.show();
return 0;
}
浙公网安备 33010602011771号