重载2d指针数组的赋值运算符

时间:2015-04-04 19:26:57

标签: c++ arrays overloading chess

编辑:我们现在没有使用向量,现在的片段只是被删除了。不同的作品还没有存在,并且没有考虑有效的动作。电路板显示一个' P'如果有一块,则在正方形中,如果该指针指向null,则为空。

我正在尝试使用面向对象编程编写一个简单的国际象棋程序。到目前为止,我有一个板初始化为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语句的左侧。我不明白为什么我的书会说内存需要被释放,以及如果我们先删除所有东西就会复制任何内容。我在学校问过,并被告知要考虑一下。所以这有助于很多。如果有人可以解释我在哪里出错,我会非常感激。

0 个答案:

没有答案