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

问题描述 投票:3回答:2

我的问题如下:

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

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

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

但是,我希望女王继承checkMove函数两次 - 一次来自Rook,一次来自Bishop,以便简单地称之为自己的checkMove版本。

我尝试了一些解决方案,也玩RookBishop虚拟地继承了Figure类,但是我似乎无法将这些碎片放在一起。我是多态的概念的新手,所以我找不到适当的逻辑来实现该功能。什么是好方法?

c++ oop chess
2个回答
2
投票

女王不是白嘴鸦。

我会在这里引导(远)继承 - 唯一的重用仅限于女王。

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

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

1
投票

就在这里。

但这并不是直接显而易见的。你没有从QueenRook继承Bishop。相反,你引入了一个特定的Move基类。现在QueenMove可以继承RookMoveBishopMoveQueen片段只是一个Piece类型,其构造函数将Piece::move(一个unique_ptr<Move>)设置为QueenMove

© www.soinside.com 2019 - 2024. All rights reserved.