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();
}
~~~