-4

我遇到了 C++ 的问题。

例如我有一堂课UNIT。有什么办法,主要是这样创建它 -

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

unit[2]...;

unit[532]...;

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

4

2 回答 2

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;
    }
}
于 2013-06-24T17:42:35.383 回答
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;
}
于 2013-06-24T17:21:08.903 回答