这个功能的最佳位置在哪里? C ++

时间:2011-11-30 21:56:40

标签: c++ oop class function

在使用面向对象的方法时,是否可以使用不属于任何特定类的函数。就我而言,我希望有一个check_collision()函数,它将两个SDL_Rect作为参数,然后返回truefalseSDL_Rect可以在现有对象中找到,如字符类或tile类。有这个功能的好地方吗?我是否忽视了解决这个问题的更好方法?

4 个答案:

答案 0 :(得分:1)

我将用于面向对象的碰撞检测的方法是让对象具有check_collision()函数,该函数接收另一种类型,并以这种方式执行检查。然后,您可以使用多态和继承来定义形状树,并通过单个函数执行所有检查

答案 1 :(得分:0)

我会使用某种“DisplayObject”类来继承您可能要检查碰撞的所有可显示元素。然后,将碰撞检查放在其中。

答案 2 :(得分:0)

我会发布唯一的不同答案(暂时)。由于您已经存在一个您不拥有的类型(SDL_Rect)(它包含在第三方中),我建议您将其作为自由函数实现,如您在原始答案中所建议的那样。在我的opinoin中,对于你的直接问题,这将是最干净的方法。

bool check_collision(const SDL_Rect& l, const SDL_Rect& r);

你的另一个选择是编写一个包装SDL_Rect并提供碰撞检测的类,如下所示:

class CD_SDL_Rect
{
public:
    bool check_collision(const SDL_Rect& r);
private:
    SDL_Rect r_;
};

但对于这种特殊情况来说,这似乎有些过分。

如果您已经有一个DisplayableObject类,那么从I派生的所有可显示对象都可能会摇摆建议将其添加为成员,但情况似乎并非如此。

答案 3 :(得分:0)

使用免费功能是一种有效的方法。在命名空间内声明它,因此您不会填充全局范围。 如果函数可以声明为不是类的朋友,那就更好了。