我正在尝试使用面向对象编程编写一个简单的国际象棋程序。到目前为止,我有一个板初始化为2d指针数组。我可以在棋盘上放置棋子,打印棋盘并移动棋子。为了得到更多,我需要重载董事会类的赋值运算符。课程是:
#ifndef BOARD_H
#define BOARD_H
class Board;
#include "Piece.h"
#include <iostream>
using namespace std;
#define MAXROWS 8
#define MAXCOLS 8
typedef Piece* PiecePtr;
class Board
{
public:
Board();
Board (const Board& other);
~Board();
bool move (int fromX, int fromY, int toX, int toY);
bool place (const PiecePtr& p, int x, int y);
bool remove (int x, int y);
void write (ostream& out) const;
Board& operator= (const Board& other);
private:
PiecePtr grid[MAXROWS][MAXCOLS];
void initBoard();
void clearBoard();
void copyBoard(const Board& other);
bool canMove (int fromX, int fromY, int toX, int toY);
};
ostream& operator<< (ostream& out, const Board& b);
#endif
到目前为止,我已按如下方式编写了赋值运算符:
Board& Board::operator= (const Board& other)
{
PiecePtr temp = NULL;
if(this != &other)
{
for(int x = 0; x < MAXCOLS; x++)
{
for(int y = 0; y < MAXROWS; y++)
{
temp = grid[x][y];
delete temp;
}
}
///////////keep going here
}
return *this;
}
我觉得我觉得这太复杂了,从我对董事会和董事会的理解其他参数将是x = y语句的左侧。我不明白为什么我的书会说内存需要被释放,以及如果我们先删除所有东西就会复制任何内容。我在学校问过,并被告知要考虑一下。所以这有助于很多。如果有人可以解释我在哪里出错,我会非常感激。