指出下列代码的错误之处#include<iostream> #include<iomanip> #include<cmath> using namespace std; template<typename T> class Complex{ private: T a,b; public: Complex(T _a=0,T _b=0):a(_a),b(_b){}; T Mag(){ return sqrt(a*a+b*b); }; friend Complex operator+(Complex& v1,Complex& v2); }; template<typename T> Complex operator+(Complex& v1,Complex& v2){ Complex temp; temp.a=v1.a+v2.a; temp.b=v1.b+v2.b; return temp; }; int main() { int ir, ii; cin >> ir >> ii; Complex<int> ci1(ir, ii); Complex<int> ci2(2, 3); Complex<int> ci = ci1 + ci2; cout << ci.Mag() << endl; double dr, di; cin >> dr >> di; Complex<double> cd(dr, di); cout << setiosflags(ios::fixed) << setprecision(2); cout << cd.Mag() << endl; system("pause"); return 0; }
时间: 2024-03-16 12:42:58 浏览: 66
使用include <iostream>时一定要加using namespace std
代码的错误在于在定义运算符重载函数时,参数类型应该加上 const 修饰,避免修改参数的值。应该将运算符重载函数的定义改为:
```cpp
template<typename T> Complex<T> operator+(const Complex<T>& v1, const Complex<T>& v2) {
Complex<T> temp;
temp.a = v1.a + v2.a;
temp.b = v1.b + v2.b;
return temp;
};
```
另外,在输出 double 类型的数据时,应该用 unsetiosflags(ios::fixed) 将输出格式还原,否则后面的输出也会按照保留小数位数输出。因此应该将输出代码改为:
```cpp
cout << setiosflags(ios::fixed) << setprecision(2);
cout << cd.Mag() << endl;
cout << unsetiosflags(ios::fixed); // 还原输出格式
```
阅读全文