我有两个对象deck.h和cards.h
现在在对象类中我们创建了一个对象数组(theDeck [card_Num];)
此时我们有一个包含52个卡片对象的数组,但据我了解,我们有52张没有任何价值的卡片。
我的问题是如何在不必在类文件中创建setter的情况下为每张卡提供值?
我以为它是像这样的theDeck [i] .card(faceVale,suite :: type) 在甲板构造函数中,但我一直得到一个错误,主要是因为我错了
class Deck
{
public:
// default constructor
Deck();
private:
static const int Card_Num = 52; //Max # of cards in a deck
Card theDeck[Card_Num]; // the array holding the cards
int topCard; // the index of the top card on the deck
};
cards.h对象
#ifndef CARD_H
#define CARD_H
#include <iostream>
using std::ostream;
enum suite {clubs, hearts, spades, diamonds};
class Card
{
public:
//default constructor. It is required since another class
//may declare an array of Card objects.
Card();
//another constructor
Card (int faceValue, suite type);
// return the point value
int getPointValue() const;
private:
suite type; // the suite of the card
int faceValue; // the face value of the card
int pointValue; // the point value of the card, it is a derived value
};
答案 0 :(得分:0)
如何在不必在类文件中创建设置器的情况下为每张卡提供值?
因为您已为public
Card
构造函数
Card (int faceValue, suite type);
您可以在Deck
的构造函数中使用初始化列表:
Deck::Deck() : theDeck { { 1, clubs }, { 2, clubs }, ... { 13, clubs }
, { 1, hearts }, { 2, hearts }, ... { 13, hearts }
...
, { 1, diamonds }, { 2, diamonds }, ... { 13, diamonds } }
{
}
此时我们有一个包含52个卡片对象的数组,但据我了解,我们有52张没有任何价值的卡片。
实际上你甚至应该delete
你的默认构造函数
Card() = delete;
因为它在语义上没有意义。没有像没有面子和价值的卡片这样的东西。
或者你可以在构造函数体中重新分配默认构造的Card
值,如下所示:
Deck::Deck() {
int i = 0;
for(auto& card : theDeck) {
int faceValue = i%13 + 1;
if(i < 13) {
card = Card(faceValue,clubs);
}
else if(i < 26) {
card = Card(faceValue,hearts);
}
else if(i < 39) {
card = Card(faceValue,spades);
}
else if(i < 52) {
card = Card(faceValue,diamonds);
}
++i;
}
}