C++从类方法返回一个对象数组

Spr*_*fox 1 c++ arrays oop

我试图返回一个二维的'房间'对象数组作为一种打印/显示数组中的内容.

Room* m_map[10][10];
Run Code Online (Sandbox Code Playgroud)

如此生成:

//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;
    }       

}
Run Code Online (Sandbox Code Playgroud)

所以这给出了阵列中Rooms的分散.

然后,我想为这些房间所在的用户显示/打印,参考NULL.

所以我可以举例来说,如果NULL显示'#',如果它是一个房间留下''.

我不确定我应该在方法中返回的位.

任何帮助或指向正确的方向将真的很感激

jua*_*nza 7

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;
} 
Run Code Online (Sandbox Code Playgroud)

但要小心,根据用例,您可能希望返回引用,而不是副本:

const std::array<Room, TheSize>& returnArray() const
{
    return m_map;
} 
Run Code Online (Sandbox Code Playgroud)

也就是说,如果您只想打印一些对象,那么不要暴露实现细节,例如数组.您可以提供打印功能,更好的是,覆盖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
}
Run Code Online (Sandbox Code Playgroud)

编辑如果数组是2D(如注释中所述),则有选项:嵌套数组结构(std::array<std::array<T,N>,M>或"平面" N*M数组,以及一些小心地使用索引).

编辑2:如果你需要存储可以设置或不设置的东西,你可以使用数组或向量std::unique_ptr<Room>而不是普通Room的原始数据Room*.另一个选择就是使用2D地图,a std::map<int, std::map<int, Room>>.