我正在努力将细节保持在这个问题的相关内容的最小值,但我肯定会扩展任何使我的帖子更清晰的内容。
我对C ++很陌生,所以请原谅我可能是一个显而易见的问题,我甚至无法清楚地表达问题以找到有用的搜索结果。
我最终试图为行星运动编写一个蛙跳算法。我已经定义了一个名为planet
的类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()时,它工作正常。
那么我的问题是,如果j从0开始到3而不必输入p0,p1等,我将如何得到p [j]?可以在for循环中完成,是否有一些我缺少的语法?
答案 0 :(得分:1)
如果你有一个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";
}
答案 1 :(得分:0)
制作一个对象数组
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";
}