将Vector传递给另一个类
Passing Vector to another class
正如标题所示,我试图将一个向量从一个类发送到另一个类。下面是一些示例代码…
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;
}
从您的代码开始(并假设您已经使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;
};
为了在派生类Dealer
中访问整型向量cards
, 必须声明它为protected
…
从你的方法名称,我猜Deck::SetDeckSize()
是把int值放入cards
的家伙。
所以,我猜你在调用Dealer::GetStoredDeck()
之前没有调用过这个方法。
相关文章:
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?
- 动态创建 std::vector 并将其传递给另一个函数的各种方法
- 给出一个 std::vector 对另一个向量的内存的所有权?
- 具有另一个类对象的 std::vector 的类
- 将 std::vector<std::unique_ptr<T>> 分配给另一个 std::vector<std::unique_ptr<T>>
- 如何将带有 std::vector 成员的类移动到<class>另一个向量<class>中?
- 如何将 boost::mpl::vector 转换为另一个 boost::mpl::vector
- 一行 std::vector ctor 来自映射另一个向量
- 将 std::vector 重命名为另一个类以进行重载
- std::vector 删除重复项,然后删除另一个向量中的相同索引
- C++ 不允许我在以前工作后通过引用将 vector 传递给另一个函数
- 我可以按值(复制)将对象从一个 std::vector 插入到另一个吗?
- 使用std::copy将一个结构体的数组转换为另一个结构的Vector
- c++将unique_ptrs类型的vector作为参数传递给另一个等长vector的对应元素(特别是并行传递)
- 在c++ 11中,这是将一个std::vector的内容移动到另一个vector的末尾的最有效的方法吗?
- 将指定的vector内容复制到另一个vector