c++从类方法返回一个对象数组
C++ returning an array of objects from a class method
我试图返回'room'对象的二维数组,作为数组中内容的一种打印/显示。
Room* m_map[10][10];
生成如下:
//Initialise array to NULL
for(int x=0;x<10;x++)
{
for(int y=0;y<10;y++)
m_map[x][y] = NULL;
}
for(int n=0; n<10; n++)
{
for(int ran=0; ran<3; ran++)
{
int r_n = rand() % 10 ;
Room* r = new Room(n, "Normal", true, false, false, true);
m_map[r_n][n] = r;
}
}
这给出的是数组中房间的分散。
我想为用户显示/打印这些房间的位置,参考NULL。
所以我可以例如,如果NULL显示'#',如果它是一个房间,留下一个' '。
我不确定我应该在方法中返回的位。
任何帮助或指出正确的方向将是非常感激
如果数组的大小是固定的(并且在编译时已知),则使用std::array<Room, N>
更容易,如果数组的大小不是固定的,则使用std::vector<Room>
。
#include <array> // or <tr1/array> if no C++11
std::array<Room, TheSize> returnArray() const
{
return m_map;
}
不过要小心,根据用例的不同,可能希望返回引用,而不是副本:
const std::array<Room, TheSize>& returnArray() const
{
return m_map;
}
也就是说,如果你只想打印一些对象,那么就不要暴露实现细节,比如数组。您可以提供打印功能,更好的是,覆盖std::ostream& operator<<
为您的类型。
// inside your class declaration:
friend
std::ostream& operator<<(std::ostream& o, const MyClassWithRooms& r)
{
// loop over r.m_map and print to o
}
Edit如果数组是2D的(如注释中提到的),那么有选项:嵌套数组结构(std::array<std::array<T,N>,M>
,或"平面"N*M
数组,以及一些小心地玩索引)。
Edit 2:如果您需要存储可以设置或不设置的东西,您可以使用std::unique_ptr<Room>
的数组或向量,而不是原始Room*
的普通旧Room
s。另一种选择是使用2D地图,即std::map<int, std::map<int, Room>>
。
最简单的方法是为您的数组使用std::vector< Room >
。这样您就不必担心内存管理,并且数组的大小是内置的。
相关文章:
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何将一个字节数组正确地恢复为C 中的对象
- 指针阵列在一个对象数组中函数
- 处理另一个类中类动态分配的对象数组
- 如何创建一个动态数组,该数组可以保存从C++中派生的同一基类的所有不同对象
- C++:创建一个对象数组
- 函数,返回一个对象数组
- 如何在C++中构建一个对象数组,这些对象都继承自一个主类
- 为什么我可以分配一个对象数组,但不能将它们放在向量中
- 我有一个对象数组,我想发出一个包含这些对象中的一个的信号。但信号不能是指针
- 创建一个对象数组,没有匹配的构造函数初始化错误
- 如何分配一个对象数组的索引?(c++)
- 如何在它自己的类中声明一个对象数组?
- 为什么当我创建一个对象数组时调用默认构造函数,但当我将obj创建为简单变量时却出错
- 删除一个对象数组,该数组被上推为基指针
- 用常量变量声明一个对象数组
- 在C++中,我想从一个函数返回一个对象数组,并在另一个函数中使用它
- c++从类方法返回一个对象数组
- 在OpenGL中定位一个对象数组
- 在Open GL Glut中绘制一个对象数组