2013-09-19 2 views
0

Я делаю вероятностную программу для покера на C++. программа сделает колоду, перетасовывает ее, раздает пять карт и определяет, какая у вас рука. Это будет работать 16000 раз и оценить среднее количество рук, которые появляются.как установить данные частного члена в C++

Я сделал три класса, класс карты, класс колоды и класс рук. у класса карты есть символ для костюма и int для ранга, класс колоды имеет вектор из 52 карт, который должен быть закрытым, а в ручном классе есть вектор из 5 карт, который также должен быть частным членом. теперь класс колоды должен иметь функцию dealHand(), которая копирует первые пять карт колоды в ручной вектор, но как я могу это сделать, когда вектор руки должен быть закрытым и не может быть доступен из класса колоды ?

это моя колода класс

class deck 
{ 
    public: 
    deck(); 
    void shuffle(); 
    hand dealHand(); 
    void printDeck(); 

    private: 
    vector<card> deckData; 
    void loadDeck(); 


}; 

это моя рука класс

class hand 
{ 
public: 
hand(); 
void printHand(); 

private: 
vector<card>handData; 
void initHand(); 
}; 

и это определение для моей функции dealHand

hand deck::dealHand() 
{ 
    hand hand; 
    for(int j=0; j<5; j++) 
    { 
     hand.handData[j].suit = deckData[j].suit; 
     hand.handData[j].rank = deckData[j].rank; 
    } 
    return hand; 

} 

, как я мог бы сделать эту функцию вернуть объект типа hand, когда его член является приватным? Спасибо.

+0

через (общедоступный) набор/получить функцию? – Najzero

ответ

-1

Объявите «ручной» класс как друга класса «колода».

class hand { 
    friend class deck; 
    ... 
}; 

Теперь объекты класса «колода» имеют доступ к частной собственности объектов класса «рука».

1

Вы должны добавить сеттера для частных членов, таких как:

class hand 
{ 
public: 
    hand(); 
    ... 
    void addCard(suit s, rank r); 
    ... 
private: 
    vector<card>handData; 
    ... 
}; 

void hand::addCard(suit s, rank r) 
{ 
    // if you had a constructor for card using suit and rank as parameters 
    handData.push_back(card(s, r)); 
} 
0

вы можете просто добавить метод giveCard() в классе руки, что толкает его назад, и в то же время она позволяет чтобы проверить, нет ли в руке пяти карт ...