用C++设计一个考虑异常情况的分数模板类,实现正常的运算与输出
时间: 2024-05-14 12:16:15 浏览: 66
以下是一个简单的考虑异常情况的分数模板类的实现:
```c
#include <stdio.h>
#include <stdlib.h>
template<class T>
class Fraction {
private:
T numerator; // 分子
T denominator; // 分母
public:
// 构造函数
Fraction(T num = 0, T den = 1) {
if (den == 0) {
printf("Error: denominator cannot be zero.\n");
exit(1);
}
numerator = num;
denominator = den;
}
// 加法运算
Fraction<T> operator+(const Fraction<T>& f) const {
T num = numerator * f.denominator + f.numerator * denominator;
T den = denominator * f.denominator;
return Fraction<T>(num, den);
}
// 减法运算
Fraction<T> operator-(const Fraction<T>& f) const {
T num = numerator * f.denominator - f.numerator * denominator;
T den = denominator * f.denominator;
return Fraction<T>(num, den);
}
// 乘法运算
Fraction<T> operator*(const Fraction<T>& f) const {
T num = numerator * f.numerator;
T den = denominator * f.denominator;
return Fraction<T>(num, den);
}
// 除法运算
Fraction<T> operator/(const Fraction<T>& f) const {
if (f.numerator == 0) {
printf("Error: divide by zero.\n");
exit(1);
}
T num = numerator * f.denominator;
T den = denominator * f.numerator;
return Fraction<T>(num, den);
}
// 输出分数
void print() const {
printf("%d/%d\n", numerator, denominator);
}
};
int main() {
Fraction<int> f1(1, 2);
Fraction<int> f2(2, 3);
Fraction<int> f3 = f1 + f2;
f3.print(); // 输出 7/6
Fraction<int> f4 = f1 - f2;
f4.print(); // 输出 -1/6
Fraction<int> f5 = f1 * f2;
f5.print(); // 输出 1/3
Fraction<int> f6 = f1 / f2;
f6.print(); // 输出 3/4
Fraction<int> f7(1, 0); // 分母为零,会输出异常信息并退出程序
Fraction<int> f8 = f1 / f7;
return 0;
}
```
在这个实现中,我们定义了一个模板类 `Fraction<T>`,其中 `T` 是分数的类型,可以是任何支持运算符的类型,如 `int`、`double` 等。在构造函数中,我们检查分母是否为零,如果是,则输出异常信息并退出程序。在运算符重载中,我们对于除法运算还检查了除数是否为零。在输出分数时,我们简单地输出分子和分母即可。在 `main` 函数中,我们定义了一些分数并进行了加减乘除运算,同时也测试了当分母为零时的异常情况。
阅读全文