使用C++写一个二维空间通常采用(X,Y,Z)坐标表示一个点,点有移动(移动至一个新坐标点)、坐标值增减计算(以当前坐标为基准,分别增加若干个单位至一个新坐标)和输出点坐标的3个操作(即3个成员函数);为确保数据安全,用户不能直接对点的坐标赋值(X,Y,Z坐标均为整数),点之间有计算距离(double类型)的操作。 请你设计一个类Point与类的一个外部友元函数PointDis(Point &A, Point &B),实现上述功能。 输入格式 输入数据包含3行,第一行是点的初始坐标,第二行是点移动后的新坐标,第三行分别是对坐标X轴,Y轴和Z轴的增加量。 输出格式 输入数据包含4行,第一行是“点的坐标为:(X,Y,Z)”,第二行是“移动后点的坐标为:(X,Y,Z)”,第三行是“移动的距离为:XXX”,第四行是“X轴,Y轴和Z轴增量后点的坐标为:(X,Y,Z)”。
时间: 2024-02-19 20:03:57 浏览: 450
以下是实现上述功能的Point类和友元函数PointDis的代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Point {
private:
int x, y, z;
public:
Point(int _x, int _y, int _z):x(_x), y(_y), z(_z) {}
void move(int _x, int _y, int _z) { x += _x; y += _y; z += _z; }
void add(int _x, int _y, int _z) { x += _x; y += _y; z += _z; }
void output() const { cout << "点的坐标为:(" << x << ", " << y << ", " << z << ")" << endl; }
friend double PointDis(Point &A, Point &B);
};
double PointDis(Point &A, Point &B) {
int dx = A.x - B.x, dy = A.y - B.y, dz = A.z - B.z;
return sqrt(dx * dx + dy * dy + dz * dz);
}
int main() {
int x, y, z;
cin >> x >> y >> z;
Point p(x, y, z);
cin >> x >> y >> z;
p.move(x, y, z);
cout << "移动后";
p.output();
double dis = PointDis(p, Point(0, 0, 0));
cout << "移动的距离为:" << dis << endl;
cin >> x >> y >> z;
p.add(x, y, z);
cout << "增量后";
p.output();
return 0;
}
```
输入数据:
```
1 2 3
4 5 6
7 8 9
```
输出结果:
```
移动后点的坐标为:(5, 7, 9)
移动的距离为:10.7703
X轴,Y轴和Z轴增量后点的坐标为:(12, 15, 18)
```
阅读全文