我遇到了C ++的问题。
例如,我有一个班级UNIT
。有没有办法,主要是这样创建它 -
unit[1]( int a, int b);
unit[2]...;
unit[532]...;
使用它们会非常容易,但我还没有找到任何方法来使用数组。请帮忙,谢谢!
答案 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;
}