抽象类中的C ++等于方法

时间:2013-05-24 18:05:42

标签: c++ abstract-class equality

我正在开发一款国际象棋游戏。所以,我创建了一个名为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;
};

2 个答案:

答案 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方法......

答案 1 :(得分:0)

我解决了将Piece的定义更改为Abstract类而不是Interface(在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;
};