如何使用数组对类对象进行编号
How to number class objects with an array
我遇到了一个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;
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 创建自动编号的多个对象
- 如何创建一个ifstream对象的数组,以及如何使用编号的文本文件填充该数组
- 如何使用数组对类对象进行编号