c++ - C++ - 有没有办法只继承一些函数一次,而其他函数则多次继承?
问题描述
我的问题如下:
我正在用 C++ 创建一个国际象棋游戏,并且有一个基类Figure
,其中包含所有图形共享的功能,并带有一个checkMove
为每个图形单独重新定义的虚函数(因为,自然,每个图形在不同的规则下移动)。棋盘是指向Figure
s 的指针的二维数组(空方格只是空指针)。
问题是,我希望Queen
继承Rook
and Bishop
,因为它是所有意图和目的的混合,而不是编写自己不必要的长checkMove
覆盖。
然后是我的问题:在基Figure
类中,有定义图形将在控制台中代表哪个角色,它属于哪个团队等的基本功能。我希望女王只继承其中一个实例功能。
但是,我希望女王checkMove
两次继承该函数-一次从Rook
,一次从Bishop
,以便在自己的checkMove
版本中简单地调用两者。
我尝试了一些解决方案,也尝试了虚拟继承Rook
和Bishop
继承Figure
类,但是我似乎无法将这些部分放在一起。我对多态性的概念不熟悉,所以我找不到合适的逻辑来实现该功能。什么是好方法?
解决方案
女王不是车。
我会(远离)这里的继承——唯一的重用是真的只给女王。
这里更好的设计如下(伪代码):
struct Queen {
ValidMoves canMove(GameState state) {
ValidMoves res;
res.insert( canMoveAsRook(state) );
res.insert( canMoveAsBishop(state) );
return res;
}
};
推荐阅读
- python - 为什么我在 Tkinter 中收到“执行格式错误”消息
- html - 我在这里的 CSS 做错了什么?其他一切都在一边
- c# - blazor,task.delay,css 操作
- python - Pandas - 带有字符串数据的数据透视表以基于行创建新列
- swift - XCUITest - 与来自锁定屏幕的通知交互
- java - 当我在活动中使用 navHostFragment 时,android 应用程序将停止
- matillion - Matillion API 配置文件配置为发布请求
- c++ - 用 WinHttp 替换 WinInet
- c# - FluentFTP 错误 421 无法创建套接字...尝试并行上传时
- r - 在 ggplot2 中可视化整齐的数据