【发布时间】:2009-11-11 14:09:57
【问题描述】:
我创建了一些 C++ 类来模拟纸牌游戏作为学习练习。
我有 SolitaireGame、CardStack(棋盘上 10 叠卡片之一)和卡片的课程。我当前的模型指出,SolitaireGame 拥有一个包含 104 个卡片对象的向量——我称之为“鞋子”。 SolitaireGame 还跟踪 10 个 CardStack,它们本质上是存储在牌盒中的 Card 对象地址的双端队列。 Deck 和 Hand 继承自 CardStack。我通过指向存储在 Shoe 中的原始对象的指针将卡片从 Deck 传递到 Hand 到 Cascade。
根据我收到的对this 问题的一些回答,我不应该通过指针传递卡片,而应该使用 const 引用。原因是存储在向量中的对象可以移动它们的地址,因此将它们的地址存储在任何地方都是禁止的。我最近开始研究 boost::sharedptr。人们对这里使用 shared_ptr 到 Card 有何看法?
以下是这些类的简化版本:
class SolitaireGame
{
public:
SolitaireGame::SolitaireGame( int numsuits );
private:
vector<Card> _shoe;
Deck _deck;
Hand _hand;
CardStack _cols[NUM_COLUMNS];
int _numsuits;
GameState gamestate;
};
class CardStack
{
public:
CardStack(){ cout << "CardStack constructor" << endl; }
CardStack( const CardStack& );
CardStack( const deque<Card *> &d );
~CardStack(){ }
virtual Card * PullCard( Face f );
virtual void PushCard( Card * c );
Card * CardAt( int i ) const;
Card * Top() const;
deque<Card *>::iterator Begin() { return _cards.begin(); }
deque<Card *>::iterator End() { return _cards.end(); }
int Size() const;
CardStack& operator=( const CardStack& rhs );
friend std::ostream& operator<<(std::ostream &os, const CardStack &obj);
private:
deque<Card *> _cards;
};
【问题讨论】: