将Vector传递给另一个类

Passing Vector to another class

本文关键字:另一个 Vector      更新时间:2023-10-16

正如标题所示,我试图将一个向量从一个类发送到另一个类。下面是一些示例代码…

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

我试图将vector对象拉入这个类,这样dealer就可以使用整型对象。我可以让向量受保护,但是。size()是0。在第一堂课中填充和洗牌后,是否有办法将其传递到这个类中?

编辑:

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

Deck.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
    }
}

这是我必须填充向量和洗牌元素的代码。

我想把洗牌后的向量用在发牌类中。这样,发牌器就可以得到vector中的下一个元素,并对它做需要做的事情。

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

您需要做的是将create cards添加到Deck constructor中的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;
}

从您的代码开始(并假设您已经使cardsDeck中受到保护),您可以像这样使用您的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;
};

为了在派生类Dealer中访问整型向量cards必须声明它为protected

从你的方法名称,我猜Deck::SetDeckSize()是把int值放入cards的家伙。

所以,我猜你在调用Dealer::GetStoredDeck()之前没有调用过这个方法。

相关文章: