【发布时间】:2009-10-02 09:02:41
【问题描述】:
我对 C++ 编程比较陌生,但我是一名 10 年的 C 程序员,所以我对对象的指针比对对象的引用更舒服。
我正在编写纸牌游戏 - 这种设计不安全吗?有没有更好的办法?
反正我有课SolitaireGame:
class SolitaireGame:
{
public:
SolitaireGame( int numsuits = 1 );
private:
Deck * _deck;
vector<Card> _shoe;
};
Deck 是这样定义的:
class Deck:
{
public:
Deck::Deck( vector<Card>& shoe );
~Deck();
int DealsLeft() const { return deals_left; }
Card * PullCard();
private:
int deals_left;
int num_each_deal;
deque<Card *> _cards;
};
Deck 构造函数引用Card 对象的向量(牌盒,通常为 104 张牌),并将指向每张牌的指针推送到它自己的指针双端队列中。
Deck::Deck( vector<Card>& shoe )
{
vector<Card>::iterator iter = shoe.begin();
while( iter != shoe.end() )
{
_cards.push_front( &(*iter) );
iter++;
}
}
}
鞋子是在SolitaireGame 构造函数中创建的。一旦创建了这个由动态创建的Card 对象组成的向量 - 然后我将对该向量的引用传递给构造函数。
SolitaireGame::SolitaireGame( int numsuits ):_numsuits(numsuits )
{
Card * c;
vector<Card> _shoe;
for( int i = 0; i < NUM_CARDS_IN_SHOE; i++ )
{
c = new Card();
_shoe.push_back( *c );
}
_deck = new Deck( _shoe );
}
我的想法是,鞋子将成为 Card 对象的实际内存的容器,Deck 和 Columns 只处理指向这些 Card 对象的指针。
【问题讨论】:
-
感谢所有指出我在 SolitaireGame 构造函数中的
vector<Card> _shoe变量遮蔽了_shoe成员变量的人。在发布问题时,这实际上是一个错字(代码不包含此变量)。我想我不会编辑它,所以每个人的答案都有意义。