#include <iostream>
using namespace std;
enum class FruitType
{
AppleType = 0,
OrangeType = 1,
BananaType = 2,
};
class Fruit
{
public:
virtual FruitType fruit_type() const = 0;
};
class DriedFruit : virtual public Fruit
{
};
class Apple: virtual public Fruit
{
public:
FruitType fruit_type() const override { return FruitType::AppleType; }
};
class DriedApple: virtual public Apple, virtual public DriedFruit
{
};
int main()
{
Fruit *somefruit = new DriedApple;
std::cout << "Is Apple? " << std::boolalpha << (somefruit->fruit_type() == FruitType::AppleType) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBjbGFzcyBGcnVpdFR5cGUgCnsKICAgIEFwcGxlVHlwZSA9IDAsCiAgICBPcmFuZ2VUeXBlID0gMSwKICAgIEJhbmFuYVR5cGUgPSAyLAp9OwoKY2xhc3MgRnJ1aXQgCnsKcHVibGljOgogICAgdmlydHVhbCBGcnVpdFR5cGUgZnJ1aXRfdHlwZSgpIGNvbnN0ID0gMDsKfTsKCmNsYXNzIERyaWVkRnJ1aXQgOiB2aXJ0dWFsIHB1YmxpYyBGcnVpdAp7Cn07CgpjbGFzcyBBcHBsZTogdmlydHVhbCBwdWJsaWMgRnJ1aXQgCnsKcHVibGljOgogICAgRnJ1aXRUeXBlIGZydWl0X3R5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGcnVpdFR5cGU6OkFwcGxlVHlwZTsgfQp9OwoKY2xhc3MgRHJpZWRBcHBsZTogdmlydHVhbCBwdWJsaWMgQXBwbGUsIHZpcnR1YWwgcHVibGljIERyaWVkRnJ1aXQgCnsKfTsKCmludCBtYWluKCkKewogICAgRnJ1aXQgKnNvbWVmcnVpdCA9IG5ldyBEcmllZEFwcGxlOwoKICAgIHN0ZDo6Y291dCA8PCAiSXMgQXBwbGU/ICIgPDwgc3RkOjpib29sYWxwaGEgPDwgKHNvbWVmcnVpdC0+ZnJ1aXRfdHlwZSgpID09IEZydWl0VHlwZTo6QXBwbGVUeXBlKSA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0=