我在头文件中有一个类,并且在给定特定输入的情况下,我试图实现初始化。 因此,我的头文件(不包括头文件)看起来像这样:
class Card {
public:
// rank and suit names
static constexpr const char* const RANK_TWO = "Two";
static constexpr const char* const RANK_THREE = "Three";
static constexpr const char* const RANK_FOUR = "Four";
static constexpr const char* const RANK_FIVE = "Five";
static constexpr const char* const RANK_SIX = "Six";
static constexpr const char* const RANK_SEVEN = "Seven";
static constexpr const char* const RANK_EIGHT = "Eight";
static constexpr const char* const RANK_NINE = "Nine";
static constexpr const char* const RANK_TEN = "Ten";
static constexpr const char* const SUIT_SPADES = "Spades";
static constexpr const char* const SUIT_HEARTS = "Hearts";
static constexpr const char* const SUIT_CLUBS = "Clubs";
static constexpr const char* const SUIT_DIAMONDS = "Diamonds";
Card();
Card(const std::string &rank_in, const std::string &suit_in);
private:
std::string rank;
std::string suit;
};
到目前为止,对于第二个初始化程序的实现,我已经掌握了。
Card::Card(const std::string &rank_in, const std::string &suit_in){
this->rank = rank_in;
this->suit = suit_in;
}
要检查我的rank_in和suit_in是否与类中的变量之一匹配,我是否需要单独检查每个变量,或者是否有一种方法可以更有效地做到这一点?在此先感谢您的帮助,非常感谢
答案 0 :(得分:2)
还是有一种更有效的方法?
是的,您可以使用新的c ++ 11功能:
class K
{
public:
enum class R
{
TWO,
THREE,
FOUR
};
enum class Su
{
S,
H,
C,
D
};
K(const R someR, const Su someSu);
private:
R r;
Su su;
};
#endif /* K_H */
K::K(const R someR, const Su someSu): r{someR}, su{someSu}
{
}
通过这种方法,您可以通过在构造函数中混合参数的类型来避免类的用户犯错误...
答案 1 :(得分:1)
我只是临时开了两堂课,一个叫Rank,另一个叫suit。它们每个都应具有采用字符串和函数isValid()的构造函数。然后,您可以在Card类中初始化等级和西服,然后在继续进行任何操作之前检查它们是否有效。像这样:
class Rank {
public:
Rank(std::string s) : mRank(s) { }
bool isValid() const { /* check against all valid strings */ return true; }
private:
std::string mRank;
}
也许可以使用有效的字符串在类中初始化一个字符串数组,然后遍历要测试的元素,或者像上面那样进行简单的蛮力检查。