时钟类、闹钟类的程序编写,包括虚函数的定义与实现、多态的几种形 式。 实例程序编写,包括编程、编译链接、运行、调试等过程
时间: 2024-11-23 19:38:39 浏览: 20
C++虚函数及虚函数表简析
在C++中,我们可以创建一个基本的时间管理抽象,如`Clock`类,用于表示时间,然后创建一个更为具体的子类`AlarmClock`,代表闹钟,其中包含计时器功能和唤醒机制。这涉及到使用虚函数来实现多态性和继承结构。以下是一个简单的例子:
```cpp
#include <iostream>
#include <chrono> // 提供了高级时间处理功能
// 定义一个基类 Clock
class Clock {
public:
virtual ~Clock() {} // 虚析构函数,确保派生类正确销毁
// 时间获取接口(虚函数)
virtual std::chrono::time_point<std::chrono::system_clock> currentTime() const = 0;
};
// 派生类 AlarmClock,从 Clock 继承
class AlarmClock : public Clock {
private:
std::chrono::minutes alarmTime;
public:
// 构造函数设置闹钟时间
AlarmClock(std::chrono::minutes time) : alarmTime(time) {}
// 重写父类虚函数,提供具体的行为
std::chrono::time_point<std::chrono::system_clock> currentTime() const override {
return std::chrono::system_clock::now() + alarmTime;
}
// 闹钟唤醒方法
void wakeUp() {
std::cout << "Alarm wakes you up at " << currentTime().time_since_epoch().count() << " nanoseconds.\n";
}
};
int main() {
// 创建并初始化一个AlarmClock实例
AlarmClock myAlarm(60); // 设置60分钟后的闹钟
// 使用多态调用currentTime()
if (auto current_time = dynamic_cast<AlarmClock*>(&myAlarm)) { // 检查是否为AlarmClock类型
current_time->wakeUp();
} else {
std::cout << "Not an AlarmClock instance.\n";
}
return 0;
}
```
在这个例子中:
1. `Clock` 是一个抽象基类,其 `currentTime()` 方法被声明为纯虚函数,没有实现体,要求所有派生类必须覆盖这个方法。
2. `AlarmClock` 类继承自 `Clock` 并实现了 `currentTime()` 函数,这就是多态的体现,因为不同类型的 `Clock` 对象都可以调用相同的接口 `currentTime()`。
3. `main()` 中使用 `dynamic_cast<>` 进行类型转换,以利用多态性。
编译、链接和运行过程:
1. 编译(假设你使用g++):
```
g++ -std=c++17 -c clock_example.cpp -o clock_example.o
```
2. 链接:
```
g++ clock_example.o -o clock_example
```
3. 运行:
```
./clock_example
```
4. 调试:
可以使用IDE(如Visual Studio, CLion等)或命令行工具(如gdb)进行调试。
阅读全文