#include <string>
#include <iostream>
class BaseIf
{
public:
virtual ~BaseIf() {}
virtual std::string getName() = 0;
};
class IntIf : public virtual BaseIf
{
public:
virtual ~IntIf() {}
virtual int getValue() = 0;
};
class FloatIf : public virtual BaseIf
{
public:
virtual ~FloatIf() {}
virtual float getValue() = 0;
};
class BaseImpl : public virtual BaseIf
{
public:
std::string getName () override { return "whoa dude"; }
};
class IntImpl : public virtual IntIf, public BaseImpl
{
public:
int getValue() override { return 42; }
};
int main()
{
BaseIf* bif = new IntImpl;
std::cout << bif->getName() << "\n";
IntImpl iimp;
std::cout << iimp.getName() << "\n";
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZUlmCnsKcHVibGljOgogICAgdmlydHVhbCB+QmFzZUlmKCkge30KCiAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGdldE5hbWUoKSA9IDA7Cn07CgpjbGFzcyBJbnRJZiA6IHB1YmxpYyB2aXJ0dWFsIEJhc2VJZgp7CnB1YmxpYzoKICAgIHZpcnR1YWwgfkludElmKCkge30KCiAgICB2aXJ0dWFsIGludCBnZXRWYWx1ZSgpID0gMDsKfTsKCmNsYXNzIEZsb2F0SWYgOiBwdWJsaWMgdmlydHVhbCBCYXNlSWYKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5GbG9hdElmKCkge30KCiAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKCkgPSAwOwp9OwoKY2xhc3MgQmFzZUltcGwgOiBwdWJsaWMgdmlydHVhbCBCYXNlSWYKewogIHB1YmxpYzoKCXN0ZDo6c3RyaW5nIGdldE5hbWUgKCkgb3ZlcnJpZGUgeyByZXR1cm4gIndob2EgZHVkZSI7IH0KfTsKCmNsYXNzIEludEltcGwgOiBwdWJsaWMgdmlydHVhbCBJbnRJZiwgcHVibGljIEJhc2VJbXBsCnsKICBwdWJsaWM6CiAgICBpbnQgZ2V0VmFsdWUoKSBvdmVycmlkZSB7IHJldHVybiA0MjsgfQp9OwoKaW50IG1haW4oKQp7CiAgIEJhc2VJZiogYmlmID0gbmV3IEludEltcGw7CiAgIHN0ZDo6Y291dCA8PCBiaWYtPmdldE5hbWUoKSA8PCAiXG4iOwogICAKICAgSW50SW1wbCBpaW1wOwogICBzdGQ6OmNvdXQgPDwgaWltcC5nZXROYW1lKCkgPDwgIlxuIjsKICAgCn0=