我正在为一个C ++类的Black Jack模拟器工作。这些是我在c ++ 11中编译的相关类/结构:
类DeckFactory :使用名为GetDeck()的静态方法返回一个包含52张卡片的向量。
类卡:在名称空间Casino中定义的类,表示卡,而Ptr是卡的公共成员,是typedef卡*。
类struct Suite :在Card中定义的类,也用于声明Card的成员,如下所示Suite const& _suite。
枚举SuiteType :在类struct Suite中定义的枚举。它有四个成员CLUBS,DIAMONDS,HEARTS,SPADES
class FaceCard :一个Card的子类,其FaceRank成员声明如下:FaceRank const _rank。
枚举类FaceRank :拥有以下成员JACK,QUEEN,KING
类AceCard :卡的子类。
问题:当我创建一个套牌并在DeckFactory类的GetDeck()方法中填充52张牌时,一切正常并返回。然而,当我打印出矢量中每个对象的信息时,它不打印出每个对象的完整信息,实际上它看起来好像有些卡被添加了两次,这很奇怪,因为每张卡必须是唯一的,我手动添加了唯一的卡片给方法GetDeck()中的套牌。这是输出,下面是向量组打印中涉及的每个类的相关代码。
输出:
主要方法:
DeckFactory GetDeck()方法:
分别为Card,Suite,FaceCard和AceCard的
Card,Suite,FaceCard,AceCard的构造商:
答案 0 :(得分:2)
问题是_suite
的{{1}}数据成员是Card
。如果你
将类型更改为const Suite &
,我怀疑你会得到你想要的行为。
当你像这样构建一个新的const Suite
时,
Card
请注意,将根据您的枚举值deck.push_back(new Casino::Card(2, Casino::Card::Suite::CLUBS);
构建一个临时Suite
对象。临时对象的生命周期仅在您的构造函数中,因此您必须将其复制或移动到CLUBS
对象中。否则,Card
仅指代可以用其他内容覆盖的内存位置。