数据的间距问题(函数模板) 类point有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干构造函数和一个重载-(减号,计算两点距离)的成员函数。 要求设计一个函数模板 template < class T > double dist(T a, T b) 对int,float,point或者其他类型的数据,返回间距。 输入格式: 每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为point类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为point型元素,输入两个point型数据(x1 y1 x2 y2),输入0时标志输入结束。 输出格式: 对每个输入,每行输出一个间距值。 输入样例: 1 2 5 3 2 4 5 9 2 2.2 9.9 0 输出样例: 3 5.83095 7.7
时间: 2023-05-22 16:05:17 浏览: 145
可以使用以下代码来解决该问题:
```
#include <iostream>
#include <cmath>
using namespace std;
class point {
public:
double x;
double y;
point() {}
point(double x, double y) {
this->x = x;
this->y = y;
}
double operator- (const point& other) const {
return sqrt((x - other.x) * (x - other.x) + (y - other.y) * (y - other.y));
}
};
template <class T>
double dist(T a, T b) {
return a - b;
}
int main() {
int type;
while (cin >> type && type) {
if (type == 1) { // 整型元素
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
cout << dist(sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))) << endl;
} else if (type == 2) { // 浮点型元素
double x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
cout << dist(sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))) << endl;
} else if (type == 3) { // point类型元素
double x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
point a(x1, y1), b(x2, y2);
cout << dist(a, b) << endl;
}
}
return 0;
}
```
在这个程序中,我们定义了一个 `point` 类,该类表示一个点,具有 `x` 和 `y` 两个数据成员和一个函数重载运算符 `-`,用于计算两个点之间的距离。
然后我们使用函数模板 `dist` 来计算两个元素之间的间距。如果元素类型是整型或浮点型,我们可以直接使用公式来计算它们之间的距离。如果元素类型是 `point`,则我们可以使用 `point` 类中的操作符 `-` 来计算距离。
最后,在 `main` 函数中,我们读入元素类型和元素数据,然后使用 `dist` 函数计算它们之间的间距并输出结果。