13.3 牌堆

优质
小牛编辑
133浏览
2023-12-01

上一章我们用到了对象的向量,我也提到可以把向量用作对象的实例变量。本章我们就来创建包含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

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