自动创建未知数量的多个C ++对象

时间:2014-08-21 18:32:25

标签: c++ oop

我想了解C ++自动创建多个不确定数量的对象(0..n)的方法。用例如下:

假设我有一个脚本,用户必须输入相关数据(宽度,长度,高度),稍后Box类将包含这些数据。

Box
{ 
    ...
    ...
    double width;
    double length;
    double height;
    ...
    ...
}

脚本如下:

<id="width" value="1"/>
<id="length" value="3"/>
<id="height" value="3"/>

<id="width2" value="3"/>
<id="length2" value="3"/>
<id="height2" value="4"/>

<id="width3" value="2"/>
<id="length3" value="3"/>
<id="height3" value="3"/>

换句话说,如何预先知道那些对象的数量是不知道的,而不是取决于用户输入了多少个盒子信息(宽度等)。

此外,是否有任何设计模式?

4 个答案:

答案 0 :(得分:4)

使用std::vector

http://www.cplusplus.com/reference/vector/vector/

它允许向其添加未知数量的对象,并且像数组一样工作

答案 1 :(得分:2)

在运行时,您无法基于XML向您的类添加新成员。你能做的最好的就是你班上的std::map,它会将id映射到值。像

这样的东西
class Box
{
  std::map<std::string, int> values;
...

然后例如在Box构造函数中

values["width"] = 1;
values["width2] = 3;

显然,您可以从XML读取值并添加它们,而不是硬编码。

答案 2 :(得分:1)

假设您希望n个对象输入Box

Box **array = new Box*[n];
for(int i = 0; i < n; i += 1) {
    array[i] = new Box();
}

更新#1

如果你想要一个可变长度列表,你可以尝试:

答案 3 :(得分:1)

显而易见的是,首先你需要解析xml文件。所有其他答案假设您已经知道如何做到这一点。在这里,我将补充QuinnFTW的答案,并为您提供Parsing xml with Boost的链接。为什么?好吧,如果您知道如何从xml获取对象列表,那么您就不会问这个问题了。

并补充QuinnFTW使用std::vector回答代码示例。

#include <vector>
#include <iostream>

using namespace std;

struct Box { 
    double with, length, height; 
    Box():with(0), length(0), height(0) {}
};

typedef std::vector<Box> box_list_t;


int main()
{

    Box a, b, c;
    // Create the vector.
    box_list_t box_list;

    box_list.push_back(a);  // Add a to the vector;
    box_list.push_back(b);  // Add b to the vector;
    box_list.push_back(c);  // Add c to the vector;

    box_list[0].with = 0;   // Change the with of a to 0;
    cout << box_list[1].with << endl; // Prints b.with. Have not been initialized.


    return 0;
}