基于类实现功能的困难

Difficulty in implementing function based on classes

本文关键字:功能 于类 实现      更新时间:2023-10-16

我正在尝试编写一个函数,该函数检查给定点是否包含在圆中(位于整数XY平面)。对于该任务,我想使用类,如下所示。

class Point
{
public:
Point(int x, int y);
int getX() const;
int getY() const;
void setX(int x);
void setY(int y);
private:
int x, y;
};
class Circle
{
public:
Circle(int x, int y, int r);
bool contains(const Point &p) const;
private:
const Point center;
int radius;
};

我发现编写"包含"功能的困难。这是我所做的。当我编写此功能时,我遇到了一个错误,上面写着"会员点:: X无法访问",而我不明白是什么问题。

bool Circle::contains(const Point &p) const
{
   if ((p.x-center.x)>=(-1*radius) && (p.x-center.x)<=radius && (p.y-center.y)>=(-1*radius) && (p.y-center.y)<=radius )
       return true;
   return false;

}

x private Point的数据成员,这基本上意味着它无法直接访问<<em>/em> Point类外部。

要从外部Point类访问x,您需要一个返回x的公共功能。

int getX() const {
   return x;
}

每当需要从外部Point类访问x时调用此功能。

您无法访问班级以外的私人成员。在Point类中,x是私人成员,因此您无法从Circle访问它。

您的代码包含一个公共功能int getX() const,它准确地适合您的情况,从另一个上下文中访问x

您应该从Circle使用此公共成员函数,并在其中使用您的代码如下:

bool Circle::contains(const Point &p) const
{
   // Copy of question code, note that this code doesn't do what you think it does
   if ((p.getX()-center.getX())>=(-1*radius) && 
       (p.getX()-center.getX())<=radius      && 
       (p.getY()-center.getY())>=(-1*radius) && 
       (p.getY()-center.getY())<=radius)
   {
       return true;
   }
   return false;
}

我想以下代码还可以。我没错,是吗?

bool Circle::contains(const Point &p) const
{
    int distX, distY;
    distX=p.getX()-center.getX();
    distY=p.getY()-center.getY();
    if ((distX*distX + distY*distY) > (radius*radius))
        return false;
    return true;
}

,感谢所有人!