【问题描述】设计一个名为Point的类,表示平面坐标下的一个点,这个类包括:
(1)两个double 型数据成员:x, y,分别表示横坐标和纵坐标
(2)一个不带形参的构造函数,用于创建原点:(0,0)
(3)一个带形参的构造函数:Point(double x, double y)
(4)成员函数getx(),返回横坐标
(5)成员函数gety(),返回纵坐标
(6)成员函数dist(constPoint& p),返回当前点与给定点的距离
然后在Point 类的基础上定义派生类Point3D,表示三维空间的一个点,包括:
(1)一个double 型数据成员:z,表示z-坐标
(2)一个不带形参的构造函数,用于创建原点:(0,0,0)
(3)一个带形参的构造函数:Point3D(double x, double y, double z)
(4)成员函数getz(),返回z-坐标
(5)成员函数dist(constPoint3D& p),返回当前点与给定点的距离
实现这个类,并在主函数中测试这个类:创建三维空间坐标点A(0,0,0)和B(4,5.6,7.8),并输出它们之间的距离。
【输入形式】无
【输出形式】三维空间坐标点A和B的距离。
【样例输入】无
【样例输出】|A-B|=10.4019
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
Point() { x = 0; y = 0; } // 默认构造函数
Point(double a, double b) { x = a; y = b; } // 自定义构造函数
double getx() const { return x; }
double gety() const { return y; }
double dist(const Point& p) const {
double dx = x - p.x;
double dy = y - p.y;
return sqrt(dx*dx + dy*dy);
}
private:
double x;
double y;
};
class Point3D : public Point {
public:
Point3D() : Point() { z = 0; }
Point3D(double a, double b, double c) : Point(a, b) { z = c; }
double getz() const { return z; }
double dist(const Point3D& p) const {
double dx = getx() - p.getx();
double dy = gety() - p.gety();
double dz = z - p.z;
return sqrt(dx*dx + dy*dy + dz*dz);
}
private:
double z;
};
int main() {
Point3D A(0, 0, 0);
Point3D B(4, 5.6, 7.8);
double dist = A.dist(B);
cout << "|A-B|=" << dist << endl;
return 0;
}