我遇到了 C++ 的问题。
例如我有一堂课UNIT
。有什么办法,主要是这样创建它 -
unit[1]( int a, int b);
unit[2]...;
unit[532]...;
使用这些将非常容易,但我还没有找到任何方法来使用数组制作它们。请帮忙,谢谢!
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;
}
}
是的,您可以将单元数组更改为类型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;
}