2017-02-19 4 views
0

У меня есть два объекта deck.h и cards.hизменения объекта массив данных

сейчас в классе объектов мы создали массив объектов (theDeck [card_Num];)

на данный момент мы имеем массив с 52 карточными объектами, но из моего понимания у нас есть 52 карты без ценности.

Вопрос в том, как я могу присвоить значения каждой карте без необходимости создания сеттера в файле класса?

я думал, что это было что-то вроде этого theDeck [я] .card (faceVale, люкс :: типа) в конструкторе палубе, но я постоянно получаю сообщение об ошибке, потому что в основном я ошибаюсь

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

карты. ч объект

#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

в файле cards.h – William

+0

Было бы неплохо [изменить] ваш вопрос, чтобы удалить ненужный код. –

ответ

0

как я могу дать значения для каждой карты, без необходимости делать сеттер в файле класса?

Поскольку вы объявили этот public конструктор Card

Card (int faceValue, suite type); 

вы можете использовать список инициализации в Deck «s конструктор:

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; 
    } 
} 
+0

может у вас объяснить подробнее об этом – William

+0

@William Что вы не понимаете конкретно? –

+0

shouldnt я только разрешено выбирать индекс массива, как theDeck [i] .... я не знал, что вы могли вводить информацию в массив вроде – William

Смежные вопросы