C++ 如何为抽象类创建二维数组
我想用棋子做一个棋盘。我知道了C++ 如何为抽象类创建二维数组,c++,arrays,inheritance,abstract-class,C++,Arrays,Inheritance,Abstract Class,我想用棋子做一个棋盘。我知道了 class ChessPiece { public: ChessPiece(); virtual ~ChessPiece(); virtual bool movePiece() = 0; }; 这个班呢 class Pawn: public ChessPiece { public: Pawn(); virtual ~Pawn(); bool movePiece(); }; 在我的主要工作中,我试图创建一个二维棋
class ChessPiece
{
public:
ChessPiece();
virtual ~ChessPiece();
virtual bool movePiece() = 0;
};
这个班呢
class Pawn: public ChessPiece
{
public:
Pawn();
virtual ~Pawn();
bool movePiece();
};
在我的主要工作中,我试图创建一个二维棋子数组,但因为它是抽象的,所以给了我一些问题
我试过这个
ChessPiece** board = new ChessPiece[8][8];
或
但它似乎不起作用。。
任何帮助都将不胜感激
谢谢大家! 您的棋盘必须持有指向
棋子
的指针,每个棋子都要单独分配。电路板始终为8x8,因此没有理由为其分配new
。相反:
ChessPiece * board[8][8];
然后是:
for (int i = 0; i < 8; ++i) {
board[1][i] = new Pawn();
}
board[0][0] = new Rook();
board[0][1] = new Knight();
// etc...
for(int i=0;i<8;++i){
董事会[1][i]=新当铺();
}
板[0][0]=新车();
董事会[0][1]=新骑士();
//等等。。。
(编辑:删除了使用每个工件类型的固定大小数组的实现,因为典当可以升级到其他工件类型。)
当然,您可以对数据进行不同的安排。您可能应该将所有游戏数据分组到一个
ChessGame
类或结构中。您可以编写一个只包含一个玩家棋子的playerpiees
类,然后将其中两个棋子放入ChessGame
中。有很多种可能性——最终取决于您自己的风格和偏好。您的棋盘必须持有指向棋子的指针,每个棋子都是单独分配的。电路板始终为8x8,因此没有理由为其分配new
。相反:
ChessPiece * board[8][8];
然后是:
for (int i = 0; i < 8; ++i) {
board[1][i] = new Pawn();
}
board[0][0] = new Rook();
board[0][1] = new Knight();
// etc...
for(int i=0;i<8;++i){
董事会[1][i]=新当铺();
}
板[0][0]=新车();
董事会[0][1]=新骑士();
//等等。。。
(编辑:删除了使用每个工件类型的固定大小数组的实现,因为典当可以升级到其他工件类型。)
当然,您可以对数据进行不同的安排。您可能应该将所有游戏数据分组到一个ChessGame
类或结构中。您可以编写一个只包含一个玩家棋子的playerpiees
类,然后将其中两个棋子放入ChessGame
中。有很多种可能性——最终取决于你自己的风格和喜好。我可以做到。但是new
没有为它分配内存吗?如果我将我的板发送到另一个函数,会发生什么?当作用域结束时,它将被删除?您的程序应具有定义良好的所有权策略。没有理由让一个以你的棋盘为参数的函数删除它——通过指针或引用传递它。可能是我遗漏了什么,但是new
和delete
看起来不错,如果棋子要在整个棋盘上移动,而不仅仅是初始化,不是吗+1 btwBetter可以是std::阵列板
@P0W不需要,移动一块就像:board[row+1][col]=board[row,col];线路板[行][列]=nullptr代码>例如,将兵推进一个空格,我可以这样做。但是new
没有为它分配内存吗?如果我将我的板发送到另一个函数,会发生什么?当作用域结束时,它将被删除?您的程序应具有定义良好的所有权策略。没有理由让一个以你的棋盘为参数的函数删除它——通过指针或引用传递它。可能是我遗漏了什么,但是new
和delete
看起来不错,如果棋子要在整个棋盘上移动,而不仅仅是初始化,不是吗+1 btwBetter可以是std::阵列板
@P0W不需要,移动一块就像:board[row+1][col]=board[row,col];线路板[行][列]=nullptr代码>例如将棋子推进一个空格棋子***棋盘=新棋子*[8]代码>万岁,你现在是3star程序员了。恭喜你<代码>棋子***棋盘=新棋子*[8]代码>万岁,你现在是3star程序员了。恭喜!