首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rect::包含(点)或Point::is_inside(Rect)

Rect::包含(点)或Point::is_inside(Rect)
EN

Stack Overflow用户
提问于 2009-01-05 11:11:40
回答 4查看 1.8K关注 0票数 4

应用程序接口应该提供Rect::contains(点)或Point::is_inside(Rect),还是两者都提供?或者数学::包含(Point,Rect),因为它是对称的?

同样的Q也适用于线段::包含(点),Rect::fully_contains(圆)等。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-05 11:16:02

Rect::contains(Point)最有意义,因为它是一个构建块。另一个实际上并不是必需的,因为您期望每个特定的形状都能实现该操作,而Point不必知道每个可能的形状。同样的答案适用于LineSegment

关于CircleRect之间的关系,使用大多数面向对象的框架会更加棘手,并且没有任何明确的答案。其他一些面向对象的风格,如CLOS,是通过使用泛型函数和方法来实现的,这使得它成为一个不成问题的问题。

票数 8
EN

Stack Overflow用户

发布于 2009-01-05 11:19:03

这完全取决于是什么让你的程序表达更清晰,更符合你试图解决的问题。因此,在某种程度上,上面的所有内容在不同的上下文中都应该很好。

然而,总的来说,我稍微倾向于Rect::contains(Point)而不是Point::Is_inside(Rect)。这是因为我认为Point类,因为它将被所有类型的类使用(如‘圆’,‘六边形’等)。应该是非常基本的,并且只包含最小的接口。

Math::contains(Rect, Point)将是我的第二选择。如果我想保持我的Rectangle类非常原始,并且不想给它添加太多的“方便”函数,我会使用这种方法。

需要记住的一件重要的事情是,不要把类的设计看得一成不变。只需继续并选择现在看起来最好的设计。当你的需求发生变化时,你可以而且应该改变它。这就是所谓的refactoring

票数 1
EN

Stack Overflow用户

发布于 2009-01-05 11:33:58

我同意Frederick的数学::包含方法,尽管在我看来,最大的缺点是开发人员在查找方法时失去了IntelliSense的可发现性。那是我用Boost和STL做的事之一。

Rect::contains最终出错的一个例子是iPhone开发工具包绘制字符串的方法,基本上是String::drawInRect。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/412823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档