2

正如标题所示,我正在尝试将矢量从一个类发送到另一个类。这是一些示例代码...

class Deck
{
    public:

    //constructor
    Deck(){}
    ~Deck(){} //deconstructor

//global for setting deck size
int SetDeckMultiplier;

    //Card SetUp
            //access vector
        std::vector<int> GetCopyOfVector(){return cards;}
            //set deck size based on multiplier
        void SetDeckSize();
            //shuffle card vector
        void shuffle();

    //End Card Setup

     protected:

     private:
std::vector <int> cards;

};

这实质上是建立一个向量,用整数填充它,而不是对整数进行洗牌。

我有第二节课...

class Dealer: public Deck
{
  public:



  void Hit();
  void GetStoredDeck()
  {

    std::cout << cards.size() << std::endl;
  }
  void DealCard();
  void DealerScore();
  void IniDeal();
  void CardPositions();

  private:

};

我正在尝试将向量拉入此类,以便经销商可以使用整数。我可以使向量受到保护,但 .size() 为 0。在第一堂课中填充和洗牌后,有没有办法将它传递给这个类?

编辑:

对于类中的函数,我没有太多代码。我只是在做一个骨架设置。

甲板.cpp

void Deck::SetDeckSize()
{
      for (int i = 0; i < (52 * SetDeckMultiplier); i++)
        {
        cards.push_back(i);
        }

    //set card values
      for (int i = 0; i > (52 * SetDeckMultiplier); i++)
      {
        cards[i] =  i;

      }

}

void Deck::shuffle()
{
    for (int i = 0; i < (52 * SetDeckMultiplier); i++)
        {
       int r = i + (rand() % ((52 * SetDeckMultiplier) - i)); // Random remaining position.

       int temp = cards[i]; cards[i] = cards[r]; cards[r] = temp; //swap cards

       while (cards[i] >= 52) cards[i] = cards[i] - 52; //loop to ensure correct number for display

        //std::cout << cards[i] << std::endl;//display random cards.. for now
    }
}

这是我必须填充向量并随机播放元素的代码。

我想采用洗牌向量并在经销商类中使用它。这样,荷官就可以得到向量中的下一个元素,并用它做需要做的事情。

我所说的 size() 是,如果我使向量受保护而不是私有,我可以通过继承使用向量,但它是空向量而不是填充和洗牌的向量。

4

3 回答 3

1

从您的代码开始(并假设您已在cards受保护的范围内Deck),您可以像这样使用您的 Dealer 类:

Dealer dealer;
dealer.SetDeckSize();
dealer.shuffle();
dealer.GetStoredDeck();

但是,正如@Troy 指出的那样,您的课程设计看起来并不好。庄家不是套牌,所以Dealer不应该是 的子类Deck。相反,Dealer应该包含 Deck 类的一个字段,如下所示:

class Dealer
{
  public:
  void Hit();
  void DealCard();
  void DealerScore();
  void IniDeal();
  void CardPositions();

  private:
  Deck deck;
};
于 2013-01-08T05:52:30.773 回答
1

您需要做的是在 Deck 构造函数中添加创建卡cards这只是一个简单的示例,它显示了基类和派生类之间的共享数据:

class Deck
{
public:
  Deck() : cards{1,2} {}    // C++11 supports initializer list
  virtual ~Deck() {}        // better declare base destructor as virtual

protected:                  // derived class can access protected base members
  std::vector <int> cards;  
};

class Dealer: public Deck
{
public:
  Dealer()   // Deck default constructor is called 
  {
  }

  void GetStoredDeck()
  {
     std::cout << cards.size() << std::endl;
  }
};

int main(int argc, char* argv[])
{
  Dealer dealer;
  dealer.GetStoredDeck();   // you should see 2 cards now?
  return 0;
}
于 2013-01-08T05:40:10.760 回答
0

为了cards在您的派生类中访问 int 向量Dealer,您必须声明它protected...

从您的方法名称来看,我猜Deck::SetDeckSize()是那个将 int 放入cards.

所以,我猜你在调用Dealer::GetStoredDeck().

于 2013-01-08T05:43:00.713 回答