用C++编写一个二维点和三维点类。 要求: (1)二维点类有x,y坐标属性,编写计算点到坐标原点距离函数; (2)三维点从二维点派生而来,编写计算点到坐标原点距离函数。
时间: 2024-02-17 13:04:39 浏览: 85
好的,以下是一个简单的实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Point2d {
public:
Point2d(double x, double y) : x(x), y(y) {}
double distance_to_origin() const {
return sqrt(x * x + y * y);
}
private:
double x;
double y;
};
class Point3d : public Point2d {
public:
Point3d(double x, double y, double z) : Point2d(x, y), z(z) {}
double distance_to_origin() const {
return sqrt(x * x + y * y + z * z);
}
private:
double z;
};
int main() {
Point2d p2d(3, 4);
Point3d p3d(1, 2, 3);
cout << p2d.distance_to_origin() << endl; // 输出5
cout << p3d.distance_to_origin() << endl; // 输出3.74166
return 0;
}
```
在这个实现中,我们先定义了一个二维点类`Point2d`,它有`x`和`y`坐标属性,并且有一个计算点到坐标原点距离的方法`distance_to_origin`。这个方法使用勾股定理计算点到原点的距离。
接着,我们定义了一个三维点类`Point3d`,它从`Point2d`派生而来。它有一个额外的`z`坐标属性,并且也有一个计算点到坐标原点距离的方法`distance_to_origin`。这个方法同样使用勾股定理计算点到原点的距离,只不过要多考虑一个维度。
在`Point3d`类中,我们使用了`public`继承了`Point2d`。这样就可以不用重新定义`x`和`y`属性,而是直接在父类中定义,然后在子类中只需要添加`z`属性即可。
使用这个实现的时候,我们可以这样创建一个二维点和一个三维点:
```c++
Point2d p2d(3, 4);
Point3d p3d(1, 2, 3);
```
然后可以调用`distance_to_origin`方法计算它们到原点的距离:
```c++
cout << p2d.distance_to_origin() << endl; // 输出5
cout << p3d.distance_to_origin() << endl; // 输出3.74166
```
注意,在`Point3d`类中,我们重新定义了`distance_to_origin`方法。这是因为二维点和三维点计算距离的方式是一样的,只不过多了一个维度。因此,我们可以直接在子类中重新定义这个方法,而不需要继承父类的实现。
阅读全文