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

How to number class objects with an array

本文关键字:编号 对象 何使用 数组      更新时间:2023-10-16

我遇到了一个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;
}