C ++ равный метод в абстрактном классе

Я занимаюсь шахматами. Итак, я создал абстрактный класс Piece, а реальные куски реализуют этот класс, поэтому у меня есть конкретные классы, такие как Pawn, Rook …

Проблема в том, что мне нужно равный Метод в интерфейсе для сравнения двух частей. У меня проблема с этим, потому что я хотел метод polimorfic, то есть метод, который мог бы сравнить кусок с любой частью. Проблема в том, что я не могу объявить «Piece o» как аргумент метода, потому что Piece является абстрактным типом. Как я могу сделать это в C ++?

У меня есть следующий код:

class Piece
{
public:
virtual ~Piece();

virtual std::string name() = 0;
virtual Color color() const = 0;
virtual Type type() const = 0;
virtual Position position() const = 0;
virtual void moveToPosition(Position p) = 0;
virtual bool isValidMove(Position np, Board &b) = 0;
virtual vector<Movimento>& generateMoves(Board &t) = 0;
virtual bool equal(Piece &o) = 0;
};

0

Решение

может быть сделать что-то вроде

virtual bool operator==(const Piece&) = 0;

нет нарезки объекта, вы можете сравнить тип и другую информацию ..

или вы можете просто реализовать его в своем классе Piece, например

virtual bool operator==(const Piece& rhs) {
if (this.type() == rhs.type()) {
return true;
}
else {
return false;
}
}

на самом деле, вам, вероятно, не нужно operator== перегружен, но вместо этого просто equal метод …

0

Другие решения

Я решил свою проблему, изменив определение Piece на абстрактный класс вместо интерфейса (в словаре Java). Теперь мой код менее избыточен и понятен.

class Piece
{
protected:
std::string m_Name;
Color m_Color;
PieceType m_PieceType;
Position m_Position;

public:
Piece(std::string n, Color c, PieceType t, Position p) :
m_Name(n), m_Color(c), m_PieceType(t), m_Position(p){};
virtual ~Piece();

std::string name() const;
Color color() const;
PieceType pieceType() const;
Position position() const;
bool equal(const Piece&) const;
virtual void moveToPosition(Position p) = 0;
virtual bool isValidMove(Position np, Board &t) = 0;
virtual vector<Move>& generateMoves(Board *b) = 0;
};
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector