如何在每次运行循环时更改for循环中的对象



我试图尽量减少这个问题的相关细节,但我肯定会对任何能让我的帖子更清晰的内容进行扩展。

我对C++还很陌生,所以请原谅我的一个显而易见的问题,我甚至无法很好地阐明这个问题,无法找到有用的搜索结果。

我最终试图为行星运动编写一个蛙跳算法。我定义了一个名为行星的类

Planet(double mass, double x0, double x1, double v0, double v1)

然后我有对象

Planet p0(2.0, -0.5, 0, -0.94, 0.65);
Planet p1(1.0, -0.6, -0.2, 1.86, 0.7);
Planet p2(1.0, 0.5, 1.0, -0.44, -1.40);
Planet p3(0.4, 0.6, 0.3, 1.15, -1.50);

我想写一个for循环,它将贯穿其中的每一个,并从每个循环中提取一个特定的组件进行计算;计算牛顿引力。我首先想测试如何从对象中获取特定组件。

我设想这是类似的东西

for(int j=0; j<4; ++j){
cout << p[j].getvx() << "n";
}

已经定义了getvx()。例如,当我尝试p1.getvx().时,它工作得很好

那么,我的问题是,如果不必键入p0、p1等,我如何获得从0到3的j的p[j]?可以在for循环中完成吗?我缺少一些语法吗?

如果你有一个C++11编译器,你可以很容易地在循环中做到这一点:

for (auto& p : {p0, p1, p2, p3}}
{
    cout << p.getvx() << "n";
}

否则,最简单的解决方案是将行星做成一个阵列,而不是四个单独的物体。

编辑:要使用数组,你可以这样做:

Planet planets[] = {
    Planet(2.0, -0.5, 0, -0.94, 0.65),
    Planet(1.0, -0.6, -0.2, 1.86, 0.7),
    Planet(1.0, 0.5, 1.0, -0.44, -1.40),
    Planet(0.4, 0.6, 0.3, 1.15, -1.50)
};
for (int i = 0; i < sizeof(planets) / sizeof(planets[0]); ++i)
{
    cout << planets[i].getvx() << "n";
}

制作一个对象数组

    planet p[4];

为其分配值

p[0](2.0, -0.5, 0, -0.94, 0.65);
p[1](1.0, -0.6, -0.2, 1.86, 0.7);
p[2](1.0, 0.5, 1.0, -0.44, -1.40);
p[3](0.4, 0.6, 0.3, 1.15, -1.50);

然后循环使用 for(int j=0; j<4; ++j){ cout << p[j].getvx() << "n"; }

相关内容

  • 没有找到相关文章

最新更新