用C++编程任务描述 定义一个实数计算类Real,实现浮点数+、-、*、/基本算术运算。 要求:可以进行数据范围[−3.4∗1038,3.4∗1038]检查,数据溢出时显示错误信息。 输入包含多组测试数据,每组输入数据格式:浮点数1 运算符 浮点数2,数字与符号之间有一个空格例如:2.1 + 2.1,假设为除法运算时,不会出现除以0的情况。 计算结果,如果没有溢出,则直接输出结果,结果保留两位小数,否则输出"Overflow"。 样例输入: 36792.6 + 3870.3 3.45 * 987.8 10 * 4.5e37 样例输出: 40662.90 3407.91 Overflow 提示:请使用运算符重载实现。
时间: 2024-03-02 09:50:08 浏览: 121
好的,以下是代码实现:
```c++
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
using namespace std;
class Real {
public:
Real() : num(0) {}
Real(double d) : num(d) {}
Real operator+(const Real& other) const {
double res = num + other.num;
if(!check(res)) {
cout << "Overflow" << endl;
return Real();
} else {
return Real(res);
}
}
Real operator-(const Real& other) const {
double res = num - other.num;
if(!check(res)) {
cout << "Overflow" << endl;
return Real();
} else {
return Real(res);
}
}
Real operator*(const Real& other) const {
double res = num * other.num;
if(!check(res)) {
cout << "Overflow" << endl;
return Real();
} else {
return Real(res);
}
}
Real operator/(const Real& other) const {
double res = num / other.num;
if(!check(res)) {
cout << "Overflow" << endl;
return Real();
} else {
return Real(res);
}
}
friend istream& operator>>(istream& is, Real& r) {
is >> r.num;
return is;
}
friend ostream& operator<<(ostream& os, const Real& r) {
os << setiosflags(ios::fixed) << setprecision(2) << r.num;
return os;
}
private:
bool check(double d) const {
return !isnan(d) && !isinf(d) && d <= 3.4e38 && d >= -3.4e38;
}
double num;
};
int main() {
Real a, b;
char op;
while(cin >> a >> op >> b) {
switch(op) {
case '+':
cout << a + b << endl;
break;
case '-':
cout << a - b << endl;
break;
case '*':
cout << a * b << endl;
break;
case '/':
cout << a / b << endl;
break;
default:
break;
}
}
return 0;
}
```
我们定义了一个名为Real的类,其中包含了检查数据范围的函数check(),以及重载的四则运算符,还有输入输出流运算符。在主函数中,读入数据后根据运算符进行相应的计算,并输出结果。如果溢出则输出"Overflow"。
阅读全文