13.3 牌堆

最后更新于:2022-04-01 06:24:05

上一章我们用到了对象的向量,我也提到可以把向量用作对象的实例变量。本章我们就来创建包含Card向量的Deck对象。 Deck结构可以这样定义: ~~~ struct Deck { apvector<Card> cards; Deck (int n); }; Deck::Deck (int size) { apvector<Card> temp (size); cards = temp; } ~~~ 实例变量名cards可以让我们将Deck对象和它包含的Card向量区分开。 目前Deck定义中只有一个构造函数。该构造函数中先创建了局部变量temp,temp以size为参数调用apvector的构造函数完成初始化。 然后将向量从temp复制到实例变量cards中。 现在,我们可以用下面语句创建一个扑克牌的牌堆: ~~~ Deck deck (52); ~~~ 这是Deck对象的状态图: ![enter image description here](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-09-02_55e648197d8fa.jpg) deck对象包含实例变量cards,其中cards是Card对象的向量。我们可以通过组合对象访问语法和数组元素选择语法来访问deck对象中的cards(也就是要获取牌堆中牌的信息)。比如,表达式deck.cards[i]得到牌堆deck的第i张牌,deck.cards[i].suit得到这张牌的花色。下面的循环语句说明如何遍历牌堆并输出其中的每章牌: ~~~ for (int i = 0; i<52; i++) { deck.cards[i].print(); } ~~~
';