C++ 基于typedef定义的类似类型的函数重载
我有下面的卡片类,我想根据卡片类型或卡片值检查输入的有效性。两者在程序中的类型相同,但逻辑上不同 这是验证这种方法的好方法吗?但无论如何,我想要的不是C++所支持的,因为两者都是相同类型的。我怎么能用另一种方式呢C++ 基于typedef定义的类似类型的函数重载,c++,overloading,C++,Overloading,我有下面的卡片类,我想根据卡片类型或卡片值检查输入的有效性。两者在程序中的类型相同,但逻辑上不同 这是验证这种方法的好方法吗?但无论如何,我想要的不是C++所支持的,因为两者都是相同类型的。我怎么能用另一种方式呢 typedef int type; typedef int number; struct card { type card_type; number card_number; card(int t, int n) : card_type(t), card_nu
typedef int type;
typedef int number;
struct card {
type card_type;
number card_number;
card(int t, int n) : card_type(t), card_number(n) {
check(card_type);
check(card_number);
}
bool check(const type& t)
{
if (t >= 4) {
cout << "Card Type is not valid " << endl;
return false;
}
return true;
}
bool check(const number& n)
{
return false;
}
};
typedef int-type;
类型定义整数;
结构卡{
类型卡\ U型;
卡号;
卡片(int t,int n):卡片类型(t),卡片编号(n){
支票(卡式);
支票(卡号);
}
布尔检查(常数类型和t)
{
如果(t>=4){
cout因为您使用了“type”,我想您的类型数量很少,所以我会像这样使用enum
enum type {A,B};
.
.
.
card(int t, int n) : card_type((type)t), card_number(n)
int main()
{
type x = A ;
number y = 5;
struct card my_card(1,2);
my_card.check(x);
my_card.check(y);
return 0;
}
我使用的另一个“黑客”解决方案是:
typedef unsigned int type;
typedef int number;
由于您使用了“type”,我想您的类型数量很少,所以我会像这样使用enum
enum type {A,B};
.
.
.
card(int t, int n) : card_type((type)t), card_number(n)
int main()
{
type x = A ;
number y = 5;
struct card my_card(1,2);
my_card.check(x);
my_card.check(y);
return 0;
}
我使用的另一个“黑客”解决方案是:
typedef unsigned int type;
typedef int number;
使用强类型,则无需检查
enum class CardColor {Heart, Spade, Diamond, Club};
enum class CardValue {Ace, Two, Three, /*...*/, Queen, King};
struct Card {
CardColor color;
CardValue value;
};
然后
Card card{CardColor::Club, CardValue::Ace};
使用强类型,则无需检查
enum class CardColor {Heart, Spade, Diamond, Club};
enum class CardValue {Ace, Two, Three, /*...*/, Queen, King};
struct Card {
CardColor color;
CardValue value;
};
然后
Card card{CardColor::Club, CardValue::Ace};
如果你真的想这样做,就让它们成为不同的类型。你可以为每一个类型创建类。这还有一个好处,那就是当你打算传递数字时,如果你不小心传递了类型,那么你会得到一个编译错误,反之亦然。不过,最好的解决方案是有两个函数checkType
和checkNumber
。为什么要让你这么难呢urself?显式。我不确定,但再拥有两个类似乎很简单。在任何情况下,我都能看到您的逻辑中的一些有效性。如果您真的想要这样做,请将它们设置为不同的类型。您可以为每个类型创建类。这还有一个好处,即如果您在传递数字时意外传递类型,则会出现编译错误,反之亦然反之亦然。不过最好的解决方案是有两个函数checkType
和checkNumber
。为什么要让自己这么难呢?明确一点。我不确定,但有两个以上的类似乎很简单。在任何情况下,我都能从逻辑中看到一些有效性。enum似乎工作得很好,谢谢。我认为这是唯一有效的验证方法e有界数据类型的基本检查。enum似乎工作正常,谢谢。我认为这是验证有界数据类型基本检查的唯一有效方法。