c++ - 创建类的二维数组

标签 c++ arrays class

您好,如果有人可以建议如何正确执行此操作。基本上,我正在尝试创建一个名为 Board 的类变量,其中包含 ChessPiece 实例的二维数组。

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;

class ChessPiece
{
public:
    char ToChar() { return '#'; };
};

class ChessBoard
{
    int Size;   //This means board is 8x8.
    ChessPiece ** Board;

public:
    ChessBoard();
    int GetSize() { return Size; };

    void PlotBoard();
};

ChessBoard::ChessBoard() {
    Size = 8;
    ChessPiece newBoard[Size][Size];
    Board = newBoard; //Problem here!!! How do I make Board an 8x8 array of ChessPiece?
}

void ChessBoard::PlotBoard() {
    int x, y;
    for (x = 0; x < Size; x++) {
        for (y = 0; y < Size; y++)
            printf("%c", Board[x][y].ToChar());
    }
}

int main()
{
    // ChessBoard board;
    // printf("%d", board.GetSize());
    // board.PlotBoard();

    ChessBoard * a = new ChessBoard();

    return 0;
}

我在这里真的缺少非常基本的东西,但我似乎无法弄清楚。 谢谢!

最佳答案

确实没有理由在您的场景中使用原始指针。我建议将棋盘保持为一维 std::vector,并在迭代棋盘时简单地使用行/列的乘法。

class ChessBoard
{
public:
   ChessBoard(size_t row_count) : Size(row_count), Board(row_count * row_count)
   {
   }

   void PlotBoard()
   {
     for(size_t row = 0; row < Size; ++row)
     {
        for(size_t col = 0; col < Size; ++col)
            printf("%c", Board[(row * Size) + col].ToChar());
     }
   }
}

private:
   size_t Size;
   std::vector<ChessPiece> Board;
};

关于c++ - 创建类的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18216988/

相关文章:

c++ - 在 Objective-C 中使用 fopen()

c++ - 在 C++ 中从数组中复制奇数元素

c - 找出该程序中生成 “random walk"的错误

python - 如何在 Python 中获取包含日志记录调用的类的名称?

python - "are"类的类属性/属性的正确 python 命名约定?

c++ - 在多个源文件中访问相同的类实例

c++ - 枚举值 (int) 到类型的动态映射

c++ - 使用 Eigen 库将列追加到矩阵

java - 将 Java 数组转换为可迭代

java - 将字符串添加到另一个类的数组列表中