首页 > 解决方案 > C++ - 有没有办法只继承一些函数一次,而其他函数则多次继承?

问题描述

我的问题如下:

我正在用 C++ 创建一个国际象棋游戏,并且有一个基类Figure,其中包含所有图形共享的功能,并带有一个checkMove为每个图形单独重新定义的虚函数(因为,自然,每个图形在不同的规则下移动)。棋盘是指向Figures 的指针的二维数组(空方格只是空指针)。

问题是,我希望Queen继承Rookand Bishop,因为它是所有意图和目的的混合,而不是编写自己不必要的长checkMove覆盖。

然后是我的问题:在基Figure类中,有定义图形将在控制台中代表哪个角色,它属于哪个团队等的基本功能。我希望女王只继承其中一个实例功能。

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

我尝试了一些解决方案,也尝试了虚拟继承RookBishop继承Figure类,但是我似乎无法将这些部分放在一起。我对多态性的概念不熟悉,所以我找不到合适的逻辑来实现该功能。什么是好方法?

标签: c++oopchess

解决方案


女王不是车。

我会(远离)这里的继承——唯一的重用是真的只给女王。

这里更好的设计如下(伪代码):

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

推荐阅读