使用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-03-12 16:50:21 浏览: 279
以下是实现了上述要求的代码,其中类Point和友元函数PointDis的定义都在main函数内部实现:
```cpp
#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 increase(int X, int Y, int Z) {
x += X, y += Y, z += Z;
}
void print() const {
cout << "点的坐标为:(" << x << "," << y << "," << z << ")" << endl;
}
friend double PointDis(Point &A, Point &B);
};
double PointDis(Point &A, Point &B) {
double 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);
P.print();
Point Q(0, 0, 0);
double dist = PointDis(P, Q);
cout << "移动后点的坐标为:(" << P.x << "," << P.y << "," << P.z << ")" << endl;
cout << "移动的距离为:" << dist << endl;
cin >> x >> y >> z;
P.increase(x, y, z);
P.print();
return 0;
}
```
输入样例:
```
1 2 3
4 5 6
7 8 9
```
输出样例:
```
点的坐标为:(1,2,3)
移动后点的坐标为:(4,5,6)
移动的距离为:6.9282
X轴,Y轴和Z轴增量后点的坐标为:(11,13,15)
```
阅读全文