【发布时间】:2013-02-02 20:47:00
【问题描述】:
我正在尝试学习 C++。一切都很顺利,直到我的“练习”计划遇到了很小的障碍。我相信,这个障碍源于设计问题。
想想二十一点 (21)。我做了几节课。
- 卡
- 甲板
- 手
- 播放器
一副牌由 - 为简单起见 - 有一组卡片组成。
-它可以显示所有的卡片
-它可以洗牌
-它可以移除卡片
一手牌就是一副牌——好处是
-它可以计算它的手值
-可以加牌
现在来解决我的问题 - 播放器设计
-玩家有手(私人访问)
我对播放器的问题是,那只手有一个名为 addCardToHand 的方法函数。如果我必须创建一个名为 addCardToHand(Card c) 的 Player 方法,在该方法中调用并传递给手头的同一个方法,我会感到一种冗余/糟糕的设计。
或
将 Hand h 声明为可公开访问的成员,并在“main()”中执行类似的操作
播放器 p;
卡片卡片;
p.h.addCard(aCard);
任何建议都会很有启发性并受到高度赞赏。请记住,我正在学习。
【问题讨论】:
-
您感到冗余并非没有根据,但也并不少见。如果玩家拥有的
Hand是私有的,只需要外部容器的特定读写访问方法(在本例中为Player),那么您在此处看到的应该是自然结果该隐私和访问协议。或者,您可以将玩家Hand传递给从Deck提取的函数,但这只是设计思想。 -
您可以通过调用
receiveCard函数之一来移除冗余,并让玩家决定如何处理它。 :-) 扑克玩家肯定希望他的牌是私密的。 -
这可能会偏离正确的 OO 设计,但您可以完全摆脱
Hand并将手存储在Player中。 -
谁:我就是这么想的。我找不到任何其他文献告诉我。
-
Bo:ReceiveCard 方法是个好主意。我正在尝试一个更自动化的系统,但我认为我可以使用 receiveCard 方法做更多的事情。
标签: c++ oop inheritance object-composition object-design