#include<iostream> #include<math.h> using namespace std; class Complex { double x,y; public: Complex(double x=0,double y=0):x(x),y(y){} Complex operator-(Complex& a) { x=x-a.x; y=y-a.y; return Complex(x,y); } double getx() { return x; } double gety() { return y; } }; template<class T> double dist(T a,T b) { return ads(a-b); } int main() { int a; cin>>a; while(a>0) { if(a==1) { int x,y=0; cin>>x>>y; cout<<dist(x,y)<<endl; } else if(a==2) { double x,y; cin>>x>>y; cout<<dist(x,y)<<endl; } else{ double x,y,z,w; cin>>x>>y>>z>>w; Complex a(x,y); Complex b(z,w); cout<<dist(a,b)<<endl; } } return 0; }对吗,如何改
时间: 2023-12-10 17:05:20 浏览: 73
这段代码有几个问题:
1. 函数名 `ads` 应该是 `abs`,表示求绝对值的意思。
2. 模板函数 `dist` 的实现中,应该用 `abs` 而不是 `ads`。
3. 在类 `Complex` 中,减法运算符重载实现不正确,应该返回一个新的 `Complex` 对象而不是修改自身属性。
4. 在 `main` 函数中,应该在每次循环开始前再读取一次 `a` 的值。
下面是修改后的代码:
```c++
#include<iostream>
#include<math.h>
using namespace std;
class Complex {
double x,y;
public:
Complex(double x=0,double y=0):x(x),y(y){}
Complex operator-(const Complex& a) const {
return Complex(x-a.x, y-a.y);
}
double getx() const {
return x;
}
double gety() const {
return y;
}
};
template<class T>
double dist(const T& a, const T& b) {
return abs(a-b);
}
int main() {
int a;
cin>>a;
while(a>0) {
if(a==1) {
int x,y;
cin>>x>>y;
cout<<dist(x,y)<<endl;
}
else if(a==2) {
double x,y;
cin>>x>>y;
cout<<dist(x,y)<<endl;
}
else {
double x,y,z,w;
cin>>x>>y>>z>>w;
Complex a(x,y);
Complex b(z,w);
cout<<dist(a,b)<<endl;
}
cin>>a;
}
return 0;
}
```
阅读全文