基于类实现功能的困难
Difficulty in implementing function based on classes
我正在尝试编写一个函数,该函数检查给定点是否包含在圆中(位于整数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;
}
,感谢所有人!
相关文章:
- 如何添加依赖于类本身的模板成员变量
- 为什么同时覆盖全局新运算符和特定于类的运算符不是模棱两可的行为?
- 无法从好友功能访问类的私有成员?"ostream"不是"std"的成员?
- 依赖于类成员属性的类实例成员
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- C++要在其中添加接口功能的类层次结构
- 为什么 std::vector 适用于类定义中的不完整类型?
- 如何让成员函数实现依赖于类的模板参数?
- 仅将方法应用于类的一个对象
- 我如何使用explicit模板实例化用于类定义中定义的模板成员函数
- 找不到超载的成员功能,类位于标题中
- 模板静态功能模板类类型扣除
- 用设置功能在类中设置字符串
- 超载操作员 仅适用于类的特定情况
- 具有模板成员变量和功能的类
- 在Python中,为什么要使用功能获得类成员
- 获取静态类功能的类类型
- C 通话功能是类的成员
- 如何在未评估的上下文中将成员函数的结果类型应用于类成员
- 可以是类模板内专用于类模板外的模板功能