7

我有这两个类:

class Hand
{
public:
    int getTotal();
    std::vector<Card>& getCards();
    void add(Card& card);
    void clear();
private:
    std::vector<Card> cards;
};

class Deck : public Hand
{
public:
    void rePopulate();
    void shuffle();
    void deal(Hand& hand);
};

其中shuffle()函数声明如下:

void Deck::shuffle()
{
    std::random_shuffle(cards.begin(), cards.end());
}

但是,这会返回以下错误:

'Hand::cards' : cannot access private member declared in class 'Hand'

我是否应该只包含一个函数,std::vector<Card>& getCards()或者是否有其他方法可以避免错误。

4

3 回答 3

4

您可以将卡片声明为protected

class Hand
{
public:
    int getTotal();
    std::vector<Card>& getCards();
    void add(Card& card);
    void clear();
protected:
    std::vector<Card> cards;
};

class Deck : public Hand
{
public:
    void rePopulate();
    void shuffle();
    void deal(Hand& hand);
};
于 2013-07-27T08:48:11.487 回答
0

如果继承(您的情况),最好的解决方案是cards保护:

protected:
    std::vector<Card> cards;

但总的来说,你可以让他们成为朋友。

class Hand
{
friend class Deck;
public:
    int getTotal();
    std::vector<Card>& getCards();
    void add(Card& card);
    void clear();
private:
    std::vector<Card> cards;
};
于 2015-04-29T14:50:13.870 回答
0

由于您的类 Deck 继承自 Hand (它既不是朋友类也不是方法Deck::shuffle()),您可以简单地使用 makecards protected而不是private. 这确保了封装到位,但所有派生类都可以访问该方法。

只需看看,在其他参考资料和教程中,有:

  1. http://www.cplusplus.com/doc/tutorial/inheritance/
  2. http://www.learncpp.com/cpp-tutorial/115-inheritance-and-access-specifiers/
于 2013-07-27T08:49:22.780 回答