Arrays 将对象存储在数组中

Arrays 将对象存储在数组中,arrays,c++11,object,Arrays,C++11,Object,我是一名计算机科学一年级的学生,最近我们有一个作业,介绍我们如何创建自己的类、构造函数和对象。它要求我们完成以下FOR循环,并使用用户定义类planet的不同对象来调用每个用户定义函数 ///put each Obj into an Obj[ ] ----> p[MercuryObj, VenusObj, etc...] ///object objectArray[] ///class_of_object objectArray[]??? for(int i = 0; i < 4;

我是一名计算机科学一年级的学生,最近我们有一个作业,介绍我们如何创建自己的类、构造函数和对象。它要求我们完成以下FOR循环,并使用用户定义类
planet
的不同对象来调用每个用户定义函数

///put each Obj into an Obj[ ] ----> p[MercuryObj, VenusObj, etc...]
///object objectArray[]
///class_of_object objectArray[]???

for(int i = 0; i < 4; i++){
    cout << "The orbit of " << p[i].getName();
    cout << " takes " << p[i].getOrbitPeriod() << " years." << endl;
    cout << "The diameter of " << p[i].getName();
    cout << " is " << p[i].getDiameter() << " km." << endl
    }
有人向我展示了一个不同的解决方案:

///each value is {planets name, planet's orbit, planet's diameter}
///planet's name is a string, planet's orbit & diameter are both floats  
planet p[4] = {{"Mercury", 2440, 0.387},{"Venus", 6052, 0.723},{"Earth", 6371, 1.000},{"Mars", 3390, 1.524}};    
但是我不明白
.getName()
.getOrbitPeriod()
.getDiameter()
如何能够根据“我不明白.getName()、.getOrbitPeriod()和.getDiameter()是如何工作的”来区分相应的
.get…()

将能够区分相应的每个值。获取…()?“以下内容:

planet p[4] = {{"Mercury", 2440, 0.387},{"Venus", 6052, 0.723},{"Earth", 6371, 1.000},{"Mars", 3390, 1.524}};    
你的问题似乎集中在以下措辞上: “列表初始化数组如何知道如何使用嵌套列表初始化构造其组成对象?”

看 及

基本上,编译器知道数组将包含的对象类型。当您将数组本身声明为

planet p[4] = //...

因此,当它看到每个嵌套的大括号列表时,它会将它们视为指向该类型对象的初始值设定项列表,并相应地构造该对象。由于数组具有公开“getName()”和“getOrbitPeriod(),”等的类型的对象,因此可以对每个相应的对象调用这些对象。数组中的每个对象都维护自己的数据,这些数据与初始化数据的方式一致。所以,它不是区分每个值,而是当你访问p(0)时,当你调用p [0 ] .GETNAME]时,你调用它,这个对象保持它自己的数据。

< P>如果这是C++,特别是C++ 11,你应该考虑使用STD:::St:/P>
std::array<planet, 4> p;
您使用的数组来自普通的旧C标准,而不是方便的IMHO


关于初始值设定项列表,它取决于类中成员变量的声明顺序。如果你想控制列表,你也可以重载初始值设定项列表或使用不同的构造函数,但我猜,你真的不想这么做。

你应该问问你的老师。显然,你还没有掌握C++中的一个概念(比如非静态成员函数,或者对象数组如何工作,或者数组/对象初始化如何工作,或者其他什么);任何一位值得称道的老师都应该能够找到主题并给你澄清,并且做得比一些反复评论的老师好得多。谢谢你重新表述我的问题,这恰好帮助我更好地理解了你的答案。我没有足够的声望点数来支持你的答案,但我已将其标记为正确
std::array<planet, 4> p;
for(auto &currentPlanet : p)
{
  // ... Do something
}