C++ 基于类实现函数的困难

C++ 基于类实现函数的困难,c++,class,C++,Class,我试图编写一个函数,检查给定点是否包含在圆中(位于整数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); boo

我试图编写一个函数,检查给定点是否包含在圆中(位于整数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;
};
我发现写函数“contains”有些困难。 这就是我所做的。当我编写这个函数时,我得到一个错误,说“memberpoint::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;
bool Circle::contains(const Point&p)const
{

如果((p.x-center.x)>=(-1*半径)和&(p.x-center.x)=(-1*半径)和&(p.y-center.y)
x
是类
私有数据成员,这基本上意味着它不能从
类外部直接访问

要从
Point
类外部访问
x
,您需要一个返回
x
的公共函数

int getX() const {
   return x;
}

当您需要从
类外部访问
x
时,调用此函数。

您不能访问类外部的私有成员。在类
中,
x
是私有成员,因此您不能从
访问它

您的代码包含一个公共函数
int getX()const
,该函数正好用于您的情况,从另一个上下文访问
x

您应该使用
圆圈
中的这个公共成员函数,使用它您的代码应该如下所示:

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
{
//问题代码的副本,请注意,此代码不做您认为它做的事情
如果((p.getX()-center.getX())>=(-1*半径)和
(p.getX()-center.getX())=(-1*半径)和

(p.getY()-center.getY())我想下面的代码可以。我没有错,是吗

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;
}

感谢你们大家!

你们不能使用
p.x
,因为
p.x
private
。你们必须使用
p.getX()
。尽管删除你们的getter和setter更为合理,只需将
x
y
公开即可。现在是这样吗?