Function 在哪里存储作用于对象数组的函数?

Function 在哪里存储作用于对象数组的函数?,function,class,simulation,particles,Function,Class,Simulation,Particles,我正在尝试使用c++创建如下内容: 我有一个名为“粒子”的类,它将存储每个粒子的位置和速度。此外,成员函数将使用速度数据更新粒子的位置 我还试图编写一个函数,用于检测粒子与长方体边界之间的碰撞。为此,此函数需要访问每个粒子的位置和速度。因此,函数需要将整个粒子阵列作为参数。但是,此函数不能作为粒子类的成员函数存在,因为这样它就无法访问所有粒子 问题:我在哪里包括碰撞检测功能,使其成为粒子类的可扩展部分? 我想在main.cpp文件中编写这个函数,但我丝毫不知道它是否符合OOP准则。理想情况下,

我正在尝试使用c++创建如下内容:

我有一个名为“粒子”的类,它将存储每个粒子的位置和速度。此外,成员函数将使用速度数据更新粒子的位置

我还试图编写一个函数,用于检测粒子与长方体边界之间的碰撞。为此,此函数需要访问每个粒子的位置和速度。因此,函数需要将整个粒子阵列作为参数。但是,此函数不能作为粒子类的成员函数存在,因为这样它就无法访问所有粒子

问题:我在哪里包括碰撞检测功能,使其成为粒子类的可扩展部分?


我想在main.cpp文件中编写这个函数,但我丝毫不知道它是否符合OOP准则。理想情况下,可能还有其他函数也作用于粒子阵列。

可能您想要的是某种“ParticleContainer”对象,它保存粒子阵列,并对整个粒子系统执行操作


(这也是您将运行数组并调用“Draw”函数的代码的地方。)

我想最好将检测函数声明为类粒子的朋友:它可以访问类中的所有成员。然后可以在某种管理器函数的内部循环中启动此函数,该函数将计算与阵列中所有粒子的碰撞。在这个

void CollisionMgr(particleClass *ParticleArrayPtr, int NumOfParticles)
{
   while(NumOfParticles)

    {
      CollisionOfParticle(*ParticleArrayPtr, NumOfParticles);
      NumOfParticles--;
    }

}

我倾向于使用这样一种模式:将所有模型状态保存在一个名为
model
Environment
的类中;有一个单独的类
渲染器
,它知道如何绘制模型状态;拥有一个
系统
类,将它们联系在一起。以下是高度缩写,但希望能给出一个想法:

class Box {};

class Location {};

class Particle
{
public:
    void updatePosition(double dt);
    const Location& getLocation();
};

class Environment
{
public:
    void checkForCollisions();
private:
    Box box;
    std::vector<Particle> particles;
};

class Renderer
{
public:
    void render(Environment& environment);
};

class System
{
    Environment environment;
    Renderer renderer;
};
类框{};
类位置{};
类粒子
{
公众:
无效更新位置(双dt);
const Location&getLocation();
};
课堂环境
{
公众:
void checkForCollisions();
私人:
盒子;
向量粒子;
};
类渲染器
{
公众:
无效渲染(环境和环境);
};
阶级制度
{
环境;
渲染器渲染器;
};

无论“拥有”粒子的是什么,都可能是放置粒子碰撞检测的地方。在这种情况下,任何人都拥有粒子列表并负责管理它们。(和+1,这是我很久以来在一个问题中看到的你试图做的最真实的例子)。以什么方式扩展?“显而易见”的答案是一个静态成员函数,但它可能取决于此
粒子
类的角色(主要是,它是否设计为用作基类),以及您希望如何表示边界框。还要注意,很多C++代码(也许是大多数),以及几乎所有的C++标准库,都是在没有遵循OOP指导原则的情况下设计的。C++允许其他编程范例,而不仅仅是面向对象编程。