用C++语言帮我写一个可以用来计算度分秒的加减乘除运算的计算器,要求要能调试运行
时间: 2024-10-10 10:05:38 浏览: 8
在C++中,我们可以创建一个简单的度分秒计算器类(TimeCalculator),它包含基本的加、减、乘、除函数,并且考虑了边界条件和异常处理。下面是一个基础的实现示例:
```cpp
#include <iostream>
#include <stdexcept>
class TimeCalculator {
public:
// 定义时间单位,秒是最小单位
enum TimeUnit { SEC, MIN, HOUR };
private:
int seconds;
double minutes; // 因为分钟和小时可能会有小数部分,所以用double类型表示
TimeUnit unit;
public:
// 构造函数,接受秒数并设置默认单位为秒
TimeCalculator(int s) : seconds(s), minutes(0), unit(SEC) {}
// 添加两个时间对象
TimeCalculator operator+(const TimeCalculator& other) {
int totalSeconds = seconds + other.seconds;
double extraMinutes = (totalSeconds % 60) / 60.0;
int newMinutes = minutes + other.minutes + extraMinutes;
if (unit == MIN && other.unit == MIN) {
throw std::invalid_argument("Both inputs are in minutes");
}
return TimeCalculator(totalSeconds, std::round(newMinutes), getAdjustedUnit());
}
// 减去两个时间对象
TimeCalculator operator-(const TimeCalculator& other) {
int differenceSeconds = seconds - other.seconds;
if (differenceSeconds < 0) {
throw std::runtime_error("Subtraction resulted in negative time");
}
double extraMinutes = (differenceSeconds % 60) / 60.0;
int newMinutes = minutes - other.minutes - extraMinutes;
return TimeCalculator(differenceSeconds, std::fmod(newMinutes, 60), getAdjustedUnit());
}
// 简单乘法和除法,假设都是整数操作
TimeCalculator operator*(int factor) {
return TimeCalculator(seconds * factor, minutes * factor, unit);
}
TimeCalculator operator/(int factor) {
if (factor == 0) {
throw std::runtime_error("Division by zero is not allowed");
}
return TimeCalculator(seconds / factor, minutes / factor, unit);
}
private:
TimeUnit getAdjustedUnit() {
if (minutes >= 60) {
return (minutes >= 3600) ? HOUR : MIN;
} else {
return unit;
}
}
};
// 主函数,演示如何使用
int main() {
try {
TimeCalculator t1(60); // 1 minute
TimeCalculator t2(3600); // 1 hour
TimeCalculator result = t1 + t2;
std::cout << "t1 + t2 = " << result.seconds << " seconds" << std::endl;
TimeCalculator result2 = t1 * 2;
std::cout << "t1 * 2 = " << result2.seconds << " seconds" << std::endl;
// 注意:这里只是示例,实际应用中应该处理更复杂的输入和错误情况
} catch (std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
这个例子中,我们只实现了最基本的加减乘除功能,并没有做完整的输入验证,所以在实际使用中可能需要添加更多的错误检查。在控制台运行此程序,可以看到加减乘除的结果。