C++:单个超类的数组子类
C++: Array subclass of single superclass?
我正试图使用两个类来模拟一副牌,"class deck"answers"class Card:public deck"。我希望/deck/类有一个方法来按顺序初始化52对象数组中的卡,稍后我也可以洗牌。
我该怎么做?(我需要使用类来完成这项任务——我们还没有学习向量)
Card
从Deck
派生的方法是不正确的。当您键入class Card : public Deck
时,您正在卡和甲板之间建立一个is-a关系,因此Card
是一个Deck
。当然,这是不对的。
你希望一副牌是一系列的牌,而你甚至不需要新的数据类型。
std::vector<Card> deck;
如果你愿意,你可以创建一个别名:
using Deck = std::vector<Card>;
Deck deck;
最后,创建一个返回完整的52副牌的函数:
Deck create52CardDeck(void) {
Deck deck;
// your code here, use push_back to add cards to the deck
return deck;
}
如果您坚持要为Deck创建一个类,也可以通过封装std::vector:来实现
class Deck {
std::vector<Card> vector;
public:
// make an empty deck
Deck(void) = default;
// then you can make your own methods:
static Deck create52CardDeck(void) { ... }
void shuffle() { ... }
Card takeFromTop(void) { ... }
void putCardOntop(Card c) { ... } // or const Card& argument
};
另一种选择是使用一组卡片,甚至是一个链表,而不是std::vector。然而,这使得一些操作的实施更加复杂。尽管我在这里添加了它,但有一个Card
s的阵列也有一些含义。其中之一是,如果从52中取出一些卡,那么阵列中的所有插槽实际上可能都有一张卡。
class Deck {
Card cards[52];
unsigned int ncards;
public:
// make an empty deck
Deck(void) : ncards(0)
{}
// the other methods will have to manipulate the array properly
};
如果你不能使用vector
并坚持为一副牌有一个单独的类,那么你应该有一个Deck
,里面有一个数组Card
s:
class Deck {
Card cards[52];
};
相关文章:
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- std::数组派生类聚合初始化
- 包含不同大小静态数组的类的多个实例
- Getter 函数,用于在 2d 数组是类的数据成员时检索 2d 数组元素
- 如何将移动平均线写入数组列表类?
- 如何使用对象数组访问类中的变量?
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 具有使用其他类对象的数组的类
- 函数指针数组的类模板参数推导适用于 clang,但不适用于 gcc
- 动态数组模板类:ostream&运算符友元函数的问题
- 如何在具有指向对象的指针数组的类中创建复制构造函数和析构函数,其中对象本身具有指向整数的指针数组
- 如何在C 中创建对象数组或类数组
- 如何将二维数组作为类中的私有变量,然后在构造函数中设置它
- 在标准C++中复制 C++/CLI 多维数组模板类
- 使用带有对象的数组调用类中的方法,错误"non-class type",c++
- 何时从数组删除类指针
- C 如何用数组在类中创建子类
- 具有2d数组的类中的否定运算符重载
- 如何为二维数组创建类
- C++:单个超类的数组子类