#include <iostream>
using namespace std;
enum Property
{
HasClaws = 1 << 0,
CanFly = 1 << 1,
EatsFish = 1 << 2,
Endangered = 1 << 3
};
bool isHawk(int prop) // <-- Is the input type correct?
{
// If it can fly then also it is a hawk. If it has claws then also it is a hawk.
if (prop& HasClaws || prop& CanFly)
{
return true;
}
// If it can fly as well has claws then also it is a hawk.
if ((prop& (HasClaws | CanFly)) == (HasClaws | CanFly)) //<-- Can this be written cleaner/simpler
{
return true;
}
return false;
}
int main(int argc, char *argv[])
{
cout << "Value = " << isHawk(CanFly | HasClaws) << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
我的一些问题在上面的代码中是内联的。位标志作为验证例程中的输入
在第二个条件if ((prop& (HasClaws | CanFly)) == (HasClaws | CanFly))
,我真正想检查的是,如果它既可以飞行也可以有爪子。是OR
这个合适的运营商还是应该是AND
?调用isHawk(CanFly | HasClaws)
时也是同样的问题。
一般来说,可以用上面写的isHawk()
,写成更简单/更清洁的方式吗?
这只是一个示例代码。它与鹰派或鹰派无关。
应该检查的第一个条件是什么? – 2015-04-02 02:45:10
第一个条件:如果它能飞,那么它也是鹰。如果它有爪子,那么它也是鹰。 – ontherocks 2015-04-02 02:48:10
那么,为什么你会期望第二个条件成为现实?如果它既可以飞又有爪,它可以飞,因此已经被认定为鹰? – 2015-04-02 02:51:10