类的构造函数和析构函数已经完成,请你重载输出运算符<<,以以上述多项式的形式输出,输出时不包含任何多余的空格,输出结束后不换行;系数为0的项不输出,系数1或-1的1不输出;负系数不输出+;输出的3次多项式形式如:5.2X^3-X-7
时间: 2024-03-17 16:45:25 浏览: 50
完成类的定义,重载[] , -> , ()三个运算符
好的,我已经了解您的要求。以下是重载输出运算符<<的实现代码:
```cpp
friend ostream& operator<<(ostream& out, const Polynomial& p) {
bool first = true; // 用于判断是否为多项式的第一项
for (int i = p.degree; i >= 0; --i) {
if (p.coefficients[i] == 0) continue; // 系数为0的项不输出
if (p.coefficients[i] > 0 && !first) out << "+"; // 正系数需要输出+
if (p.coefficients[i] == -1) out << "-"; // 系数为-1时不输出系数
else if (p.coefficients[i] != 1) out << p.coefficients[i]; // 系数不为1或-1时需要输出系数
first = false;
if (i == 1) out << "X"; // X的次数为1时只输出X
else if (i > 1) out << "X^" << i; // X的次数大于1时输出X^i
}
if (first) out << "0"; // 如果多项式的所有项都是0,则输出0
return out;
}
```
这个重载函数使用了一个bool型变量`first`,用于判断当前项是否为多项式的第一项。如果是第一项,就不需要输出+;否则,如果当前项系数为正,需要输出+。接下来,根据系数是否为1或-1来判断是否需要输出系数。如果系数为0,则直接跳过,不进行输出。最后,根据当前项的次数输出X和X的次数。如果多项式的所有项都是0,则输出0。
您可以使用以下代码来测试这个重载函数:
```cpp
Polynomial p(3);
p[3] = 5.2;
p[1] = -1;
p[0] = -7;
cout << p << endl; // 输出5.2X^3-X-7
```
希望对您有所帮助!
阅读全文