#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