#include <iostream>
class Animal
{
private:
int a_CUR_food_lvl;
int food_chain_level;
const int a_MAX_food_lvl;
const int a_hunger_rate;
public:
Animal(int curr, int max, int rate, int food_chain)
: a_CUR_food_lvl(curr), a_MAX_food_lvl(max),
a_hunger_rate(rate), food_chain_level(food_chain) {}
bool canEat(Animal& theAnimal) const
{ return food_chain_level > theAnimal.food_chain_level; }
//...
};
class Carnivore : public Animal
{
public:
Carnivore(int curr, int max, int rate) : Animal(curr, max, rate, 2) {}
};
class Herbivore : public Animal
{
public:
Herbivore(int curr, int max, int rate) : Animal(curr, max, rate, 1) {}
};
class Insect : public Animal
{
public:
Insect(int curr, int max, int rate) : Animal(curr, max, rate, 0) {}
};
Carnivore Wolf(150, 200, 2);
Carnivore Cheetah(75,125,2);
Herbivore Squirrel(150,200,2);
using namespace std;
int main()
{
cout << (Wolf.canEat(Squirrel)?"true":"false") << endl;
cout << (Squirrel.canEat(Cheetah)?"true":"false") << endl;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgIGNsYXNzIEFuaW1hbAogICAgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIGludCBhX0NVUl9mb29kX2x2bDsgCiAgICAgICAgICAgIGludCBmb29kX2NoYWluX2xldmVsOwogICAgICAgICAgICBjb25zdCBpbnQgYV9NQVhfZm9vZF9sdmw7IAogICAgICAgICAgICBjb25zdCBpbnQgYV9odW5nZXJfcmF0ZTsgCiAgICAKICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgQW5pbWFsKGludCBjdXJyLCBpbnQgbWF4LCBpbnQgcmF0ZSwgaW50IGZvb2RfY2hhaW4pCiAgICAgICAgICAgIDogYV9DVVJfZm9vZF9sdmwoY3VyciksIGFfTUFYX2Zvb2RfbHZsKG1heCksCiAgICAgICAgICAgIGFfaHVuZ2VyX3JhdGUocmF0ZSksIGZvb2RfY2hhaW5fbGV2ZWwoZm9vZF9jaGFpbikge30KICAgIAogICAgICAgICAgICBib29sIGNhbkVhdChBbmltYWwmIHRoZUFuaW1hbCkgY29uc3QKICAgICAgICAgICAgeyByZXR1cm4gZm9vZF9jaGFpbl9sZXZlbCA+IHRoZUFuaW1hbC5mb29kX2NoYWluX2xldmVsOyB9IAogICAgLy8uLi4KICAgIH07IAoKICAgIGNsYXNzIENhcm5pdm9yZSA6IHB1YmxpYyBBbmltYWwKICAgIHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgQ2Fybml2b3JlKGludCBjdXJyLCBpbnQgbWF4LCBpbnQgcmF0ZSkgOiBBbmltYWwoY3VyciwgbWF4LCByYXRlLCAyKSB7fQogICAgfTsKCiAgICBjbGFzcyBIZXJiaXZvcmUgOiBwdWJsaWMgQW5pbWFsCiAgICB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIEhlcmJpdm9yZShpbnQgY3VyciwgaW50IG1heCwgaW50IHJhdGUpIDogQW5pbWFsKGN1cnIsIG1heCwgcmF0ZSwgMSkge30KICAgIH07CgogICAgY2xhc3MgSW5zZWN0IDogcHVibGljIEFuaW1hbAogICAgewogICAgICAgcHVibGljOgogICAgICAgICAgICBJbnNlY3QoaW50IGN1cnIsIGludCBtYXgsIGludCByYXRlKSA6IEFuaW1hbChjdXJyLCBtYXgsIHJhdGUsIDApIHt9CiAgICB9OwoKICAgIENhcm5pdm9yZSBXb2xmKDE1MCwgMjAwLCAyKTsKICAgIENhcm5pdm9yZSBDaGVldGFoKDc1LDEyNSwyKTsKICAgIEhlcmJpdm9yZSBTcXVpcnJlbCgxNTAsMjAwLDIpOwoKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICAgaW50IG1haW4oKQogICAgewogICAgICAgY291dCA8PCAoV29sZi5jYW5FYXQoU3F1aXJyZWwpPyJ0cnVlIjoiZmFsc2UiKSA8PCBlbmRsOwogICAgICAgY291dCA8PCAoU3F1aXJyZWwuY2FuRWF0KENoZWV0YWgpPyJ0cnVlIjoiZmFsc2UiKSA8PCBlbmRsOwogICAgfQo=