Я развиваю шахматную игру. Итак, я создал абстрактный класс под названием Piece, а реальные части реализуют этот класс, поэтому у меня есть конкретные классы, такие как Pawn, Rook ...C++ равный метод в абстрактном классе
Проблема: мне нужен равный метод в интерфейсе для сравнения двух куски. У меня проблемы с этим, потому что мне нужен полиморфный метод, то есть метод, который мог бы сравнить кусок с любой частью. Проблема в том, что я не могу объявить «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;
};
Двойная отправка - ваш друг. - http://en.wikipedia.org/wiki/Double_dispatch (или RTTI, если вы просто сравниваете типы) –
Что вам нужно сравнить о них? – Collin
Вместо того, чтобы принимать параметр по значению (заставляя бесполезную копию и проблематичный срез объекта (если 'Piece' не были абстрактными), возьмите его _reference-to-const_:" 'const Piece & o'". (Не уверен, как вы будете реализовывать «равный», хотя ...) –