C ++-有没有一种方法只能一次继承某些函数,而在多次继承中多次继承其他函数?

时间:2019-04-26 09:12:53

标签: c++ oop chess

我的问题如下:

我正在用C ++创建一个国际象棋游戏,并且有一个基类Figure,其中包含所有图形共享的功能,以及为每个图形分别重新定义的虚函数checkMove(例如,当然,每个人物的移动规则都不同。棋盘是指向Figure的指针的二维数组(空正方形只是空指针)。

问题是,我想让Queen继承RookBishop,因为它既出于意图又出于目的混合在一起,而不是自己编写不必要的长checkMove覆盖。

接下来是我的问题:在基础Figure类中,有一些基本功能来定义图形将在控制台中代表哪个字符,它属于哪个团队等,我希望只能继承这些功能的一个实例。

但是,我希望女王继承两次checkMove函数-一次从Rook继承,一次从Bishop继承,以便简单地自己调用{ {1}}版本。

我尝试了一些解决方案,它们实际上也继承了checkMoveRook继承了Bishop类,但是我似乎无法将各个部分组合在一起。我是多态概念的新手,所以我找不到合适的逻辑来实现该功能。什么是好的方法?

2 个答案:

答案 0 :(得分:2)

女王不是白痴。

我会在这里避开继承-唯一的重用实际上只为女王。

这里的更好设计应类似于以下内容(伪代码):

struct Queen {
  ValidMoves canMove(GameState state) {
    ValidMoves res;
    res.insert( canMoveAsRook(state) );
    res.insert( canMoveAsBishop(state) );
    return res;
  }
};

答案 1 :(得分:1)

是的,有。

但这不是直接明显的。您不会从QueenRook继承Bishop。相反,您将引入一个特定的Move基类。现在QueenMove可以从RookMoveBishopMove继承。 Queen只是Piece类型,其构造函数将Piece::move(一个unique_ptr<Move>)设置为QueenMove