0

我正在学习 c++ 和 OOP,我有一个名为“Pion”的类,我有一个“Chessboard”类,在“Chessboard”类中需要声明一个指向“Pion”类的指针的二维数组并将其初始化为 NULL指针。

我知道如何声明二维数组,但我不知道如何将其初始化为 NULL 指针。

声明二维数组应该是这样的: Pion *P[8][8];

但我没有设置为空指针部分。

欢迎任何帮助/提示。

[编辑]

感谢所有的答案/提示,但我仍然很困惑。所以我有一个名为 Chessboard 的类,我需要创建一个链接到“Pion”类的指针的二维数组,这个数组需要是一个类成员并将其初始化为 NULL 指针。

所以我尝试了一些东西,我想出了这个

在 .h (头文件)中,我声明了一个私有成员类

介子 *P[8][8];

在构造函数中我把这个

for (int x = 0; x < 8; ++x) {
    for (int y = 0; y < 8; ++y) {
        m_velden[x][y] = NULL;
    }
}

这似乎有效,但我不确定这是否是最好的解决方案

4

4 回答 4

4

这取决于 P 是局部变量还是类成员。在第一种情况下,您可以在声明时将所有元素初始化为 NULL

Pion *P[8][8] = {};

在第二种情况下,P()Chessboard构造函数的初始化列表中使用。

于 2012-04-27T07:32:03.120 回答
2

几点建议:首先,多维数组在 C++ 中很少值得麻烦;使用一维数组可能更好,然后编写一个函数,该函数接受一行和一列并返回对该逻辑位置元素的引用。一维数组更容易处理。

其次,最好使用std::array固定大小的 C 样式数组来代替。使用没有相关的开销std::array,它提供了许多免费的好处。

第三,您应该考虑使用智能指针——例如——来std::unique_ptr<Pion>确保动态分配的对象的正确所有权和生命周期管理,假设它们是动态分配的。(当然,您还应该确保您确实需要使用指针:它可能就足够了,并且如果您可以避免使用指针并仅Pion按值将对象存储在数组中,那么它会简单得多。这是否有意义取决于在您的特定用例上。)

考虑到这三个建议,您最终可能会得到如下所示的内容:

class Chessboard
{
    std::array<std::unique_ptr<Pion>, 64> _pions;
};
于 2012-04-27T07:35:31.300 回答
0

另一个需要考虑的替代方法是向量,它们对于动态调整数组的大小非常有用,特别是对类的“数组”有用。

于 2012-04-27T08:14:25.153 回答
0

尝试这个:

for(int i = 0; i < 8; ++i)
{
  for(int j = 0; j < 8; ++j)
  {
    P[i][j] = NULL;
  }
}
于 2012-04-27T07:30:20.340 回答