【发布时间】:2019-04-26 09:12:53
【问题描述】:
我的问题如下:
我正在用 C++ 创建一个国际象棋游戏,有一个基类 Figure,其中包含所有图形共享的功能,其中一个虚函数 checkMove 为每个图形单独重新定义(当然,每个图形根据不同的规则移动)。棋盘是指向Figures 的二维指针数组(空方格就是空指针)。
问题是,我想让Queen 继承Rook 和Bishop,因为它是所有意图和目的的混合,而不是编写自己不必要的长checkMove 覆盖.
然后我的问题来了:在基础Figure 类中,有一些基本功能可以定义图形将在控制台中代表哪个角色,它属于哪个团队等。我希望女王只继承这些函数的一个实例。
但是,我希望女王继承checkMove 函数两次——一次来自Rook,一次来自Bishop,以便在其自己的checkMove 版本中简单地调用两者..
我尝试了一些解决方案,还尝试了Rook 和Bishop 虚拟继承Figure 类,但是我似乎无法将这些部分放在一起。我对多态性的概念不熟悉,所以我找不到合适的逻辑来实现该功能。什么是好的方法?
【问题讨论】:
-
“我想让女王继承 Rook 和 Bishop”不要。女王不是车。女王不是主教。不要滥用继承权。并保持简单。另外,学习使用一些空格来帮助我们阅读您的问题。
-
好读:en.wikipedia.org/wiki/SOLID(尤其是 L 部分;)
-
您可以创建实用函数来检查水平和对角线移动,并根据需要调用它们以重用代码,而无需求助于继承。
-
“如果它像鸭子一样嘎嘎叫,像鸭子一样移动,但需要电池,你可能有错误的抽象。” vegibit.com/liskov-substitution-principle
-
一旦我相信继承是每颗钉子的正确锤子,当我意识到事实并非如此时,我松了一口气。一个简单的事实是:如果你想从 Rook 那里继承一个 Queen,那么你就做错了。暂时完全忘记继承,重新考虑您的设计