继承时钟类Clock创建闹钟类,,具有成员alarmHours和 alarmMinutes,并实现构造函数,并且在alarmHours 小时和 alarmMinutes分钟,闹铃响并显示默认声音。同时实现插入运算符重载输出闹铃时间。
```c++
#include<iostream>
#include<thread>
#include<chrono>
class Clock {
protected:
int hours = 0;
int minutes = 0;
int seconds = 0;
public:
Clock() = default;
Clock(int h, int m, int s) : hours(h), minutes(m), seconds(s){}
virtual void tick() {
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
}
if (minutes == 60) {
minutes = 0;
hours++;
}
if (hours == 24) {
hours = 0;
}
}
friend std::ostream& operator<<(std::ostream& os, const Clock& c) {
os << c.hours << ":" << c.minutes << ":" << c.seconds;
return os;
}
};
class AlarmClock : public Clock {
private:
int alarmHours = 0;
int alarmMinutes = 0;
std::string defaultSound = "Beep Beep Beep";
public:
AlarmClock() = default;
AlarmClock(int h, int m, int s, int ah, int am) : Clock(h,m,s), alarmHours(ah), alarmMinutes(am) {}
bool checkAlarm() {
if (hours == alarmHours && minutes == alarmMinutes && seconds == 0) {
return true;
}
return false;
}
void ring() {
std::cout << "Alarm Ringing with " << defaultSound << std::endl;
}
void tick() override {
bool alarm = checkAlarm();
Clock::tick();
if (alarm) {
ring();
}
}
friend std::ostream& operator<<(std::ostream& os, const AlarmClock& ac) {
os << ac.alarmHours << ":" << ac.alarmMinutes;
return os;
}
};
int main() {
AlarmClock alarm(7, 30, 0, 7, 31);
std::cout << "Alarm Set for " << alarm << std::endl;
while (true) {
std::cout << alarm << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
alarm.tick();
}
return 0;
}
```