如何使用数组对类对象进行编号

时间:2013-06-24 17:14:51

标签: c++ class

我遇到了C ++的问题。

例如,我有一个班级UNIT。有没有办法,主要是这样创建它 -

unit[1]( int a, int b);

unit[2]...;

unit[532]...;

使用它们会非常容易,但我还没有找到任何方法来使用数组。请帮忙,谢谢!

2 个答案:

答案 0 :(得分:2)

C ++不允许您以这种方式初始化数组的元素。为了初始化数组的元素,必须在实例化数组后执行此操作。

unit units[10];
for(int i = 0; i < 10; i++)
    units[i] = unit(/*params*/); /./ assumes unit has a copy assignment operator

但是,您可以使用std::vector而不是数组,并使用默认值初始化它的元素。我强烈建议使用向量而不是数组,因为它将为您管理内存资源,可以调整大小并提供信息,例如它管理的元素数量。

std::vector<unit>   units(10, unit(/*constructor params*/));

下面的示例显示了如何执行此操作,并包含具有适当构造函数的unit版本。出于您的目的,您可能需要提供复制构造函数和复制赋值运算符。

#include <vector>
#include <iostream>

struct unit
{
    int a_;
    int b_;

    // constructor
    unit(int a, int b) : a_(a), b_(b) {}
};

int main()
{
    std::vector<unit>   units(10, unit(1, 2));

    for(auto i = 0; i < units.size(); ++i)
    {
        std::cout
            << "element[" << i
            << "] a_ = " << units[i].a_
            << " b = " << units[i].b_
            << std::endl;
    }
}

答案 1 :(得分:0)

是的,您可以将单位数组更改为UNIT *unit[]类型,然后调用不同的构造函数:

class UNIT
{
public:
    UNIT(){ m_x = 0; }
    UNIT(int a){ m_x = a; }
    int m_x;
};

int main()
{
   UNIT* arr[2]; 
   arr[0] = new UNIT();
   arr[1] = new UNIT(2);

   cout<<arr[0]->m_x<<endl;//0
   cout<<arr[1]->m_x<<endl;//2
   delete arr[0];
   delete arr[1];

   return 0;
}