更改对象数组数据

时间:2017-02-19 05:05:22

标签: c++ class

我有两个对象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

};

1 个答案:

答案 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;
    }
}