二维空间通常采用(X,Y,Z)坐标表示一个点,点有移动(移动至一个新坐标点)、坐标值增减计算(以当前坐标为基准,分别增加若干个单位至一个新坐标)和输出点坐标的3个操作(即3个成员函数);为确保数据安全,用户不能直接对点的坐标赋值(X,Y,Z坐标均为整数),点之间有计算距离(double类型)的操作。 请你设计一个类Point与类的一个外部友元函数PointDis(Point &A, Point &B),实现上述功能。
时间: 2023-11-28 17:48:33 浏览: 82
通过坐标计算两点距离
以下是Point类的实现:
```
#include <cmath>
class Point {
public:
Point(int x = 0, int y = 0, int z = 0) : x_(x), y_(y), z_(z) {}
void move(int dx, int dy, int dz) { x_ += dx; y_ += dy; z_ += dz; }
void increase(int dx, int dy, int dz) { x_ += dx; y_ += dy; z_ += dz; }
void output() const { std::cout << "(" << x_ << ", " << y_ << ", " << z_ << ")" << std::endl; }
friend double PointDis(const Point& A, const Point& B);
private:
int x_, y_, z_;
};
double PointDis(const Point& A, const Point& B) {
int dx = A.x_ - B.x_;
int dy = A.y_ - B.y_;
int dz = A.z_ - B.z_;
return std::sqrt(dx * dx + dy * dy + dz * dz);
}
```
在上述代码中,Point类有三个成员函数,分别是move、increase和output,用于实现点的移动、坐标值增减和输出点坐标。Point类还有三个私有数据成员,分别是x_、y_和z_,表示点的三维坐标。而PointDis函数是Point类的友元函数,用于计算两个点之间的距离。
使用示例:
```
int main() {
Point p1(1, 2, 3);
Point p2(4, 5, 6);
p1.move(1, 1, 1);
p2.increase(2, 2, 2);
p1.output(); // 输出 (2, 3, 4)
p2.output(); // 输出 (6, 7, 8)
std::cout << "distance: " << PointDis(p1, p2) << std::endl; // 输出 distance: 5.19615
return 0;
}
```
阅读全文