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

标签 c++ arrays oop

我正在尝试返回一个“房间”对象的二维数组,作为数组中内容的一种打印/显示。

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
}

编辑 如果数组是二维的(如评论中所述),则有以下选项:嵌套数组结构( std::array<std::array<T,N>,M> ,或“平面” N*M 数组,以及一些小心玩有索引)。

编辑 2:如果您需要存储可设置或不可设置的内容,您可以使用 std::unique_ptr<Room> 的数组或 vector 而不是普通的旧 Room原料的 s Room* .另一种选择是简单地使用二维 map ,std::map<int, std::map<int, Room>> .

关于C++ 从类方法返回对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164706/

相关文章:

c# - 64 位进程中的 AnyCPU C# DLL 加载 32 位 DLL

arrays - 同时过滤具有2个条件的数组?

javascript - 如何在 Vue 中对包含 2 个字段的数组进行排序?

Java封装概念不是很清楚

c# - 将包含对象作为参数传递给包含对象的方法是不是不好的设计?

c++ - 在代码中获取段错误

c++ - 初始化成员结构的正确方法

c++ - C++如何从链表中选择随机项目

php - 如何在 array_map 的可调用对象中实现类方法

java - 有没有办法将用 Java 编写的代码转换/翻译成其他语言?