问题描述
- 请设计一个类 Point 表示平面坐标上的一个点。
- 给这个类两个私有数据成员 x 和 y 代表 点的位置,x 和 y 是浮点型。
- 创建一个默认构造函数,将 x 和 y 设置为 0。
- 创建一个带有两个浮点参数的构造函数来设置 x 和 y。
- 创建一个公共函数成员printPoint以显示为格式 像“(x,y)”
- 创建公共函数成员 getX、setX、getY、setY 来访问 数据成员 x 和 y。
- 创建一个具有一种 Point 类型的公共函数成员 getdistance 参数,返回一个浮点型值表示两个的距离 点。
- 请设计一个类 Segment 表示平面上的一个段 坐标。
- 给这个类两个私有数据成员point1和point2表示 此段的端点。
- 创建一个默认构造函数,将两个端点设置为 (0,0)。
- 创建一个带有两个 Point 对象作为参数的构造函数来设置两个 端点。
- 实现以下函数成员
float getLength(); //无参数,返回段的长度。
第10、11、12步不知道怎么做。 这是我的代码。 我需要有人教我,谢谢!!!
#include <math.h>
class Point
{
public:
Point()
{
x = y = 0;
}
Point(float x1,float y1)
{
x = x1;
y = y1;
}
void setX(float X)
{
x = X;
}
float getX()
{
return x;
}
void setY(float Y)
{
y = Y;
}
float getY()
{
return y;
}
void printPoint()
{
std::cout << "(" << x << "," << y << ")";
}
float getdistance(Point p2)
{
return sqrt(pow(getX() - p2.getX(),2) + pow(getY() - p2.getY(),2));
}
private:
float x;
float y;
};
class Segment : public Point
{
public:
Segment()
{
point1 = {};
point2 = {};
}
Segment(Point pt1,Point pt2)
{
point1 = pt1;
point2 = pt2;
}
float getLength()
{
return sqrt(pow(point1.getX() - point2.getX(),2) + pow(point1.getY() - point2.getY(),2));
}
private:
Point point1;
Point point2;
};
解决方法
您已经实施了 10、11 和 12。
Segment()
{
point1 = {};
point2 = {};
}
Segment(Point pt1,Point pt2)
{
point1 = pt1;
point2 = pt2;
}
这是 10 和 11 的实现。不过我会使用构造函数初始化列表进行初始化:
Segment() = default;
Segment(const Point& pt1,const Point& pt2)
:point1(pt1),point2(pt2)
{
}
12 在这里实现:
float getLength()
{
return sqrt(pow(point1.getX() - point2.getX(),2) + pow(point1.getY() - point2.getY(),2));
}
这个函数不是常量正确的。你应该让它成为常量。我会这样写:
float getLength() const
{
const float dx = point1.getX() - point2.getX();
const float dy = point1.getY() - point2.getY();
return sqrt(dx*dx + dy*dy);
}
如果自动检查软件(例如 ejudge)出现错误,请考虑将 float 更改为 double,因为错误答案很可能是由于缺乏所需的精度