#include <iostream>
enum classId
{
person,
gunslinger,
pokerplayer,
baddude,
};
class Person
{
public:
int foo;
Person( ) : foo( classId::person ) { }
Person( int f ) : foo( f ) { }
Person( const Person &) = default;
int get_foo( ) const
{
return foo;
}
};
class Gunslinger : public Person
{
public:
Gunslinger( ) : Person( classId::gunslinger ) { }
Gunslinger( int f ) : Person( f ) { }
Gunslinger( const Gunslinger &) = default;
};
class PokerPlayer : virtual public Person
{
public:
PokerPlayer( ) : Person( classId::pokerplayer ) { }
PokerPlayer( int f ) : Person( f ) { }
PokerPlayer( const PokerPlayer &) = default;
};
class BadDude : public Gunslinger, public PokerPlayer
{
public:
BadDude( ) : Gunslinger::Person( classId::baddude ), Gunslinger(classId::baddude), PokerPlayer( classId::baddude ) { }
};
int main( )
{
BadDude bd;
std::cout << static_cast<Gunslinger>(bd).get_foo() << std::endl;
std::cout << static_cast<PokerPlayer>(bd).get_foo() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZW51bSBjbGFzc0lkCnsKIHBlcnNvbiwKIGd1bnNsaW5nZXIsCiBwb2tlcnBsYXllciwKIGJhZGR1ZGUsCn07CgpjbGFzcyBQZXJzb24KewogcHVibGljOgogIGludCBmb287CgogIFBlcnNvbiggKSA6IGZvbyggY2xhc3NJZDo6cGVyc29uICkgeyB9CiAgUGVyc29uKCBpbnQgZiApIDogZm9vKCBmICkgICAgIHsgfQoKICBQZXJzb24oIGNvbnN0IFBlcnNvbiAmKSA9IGRlZmF1bHQ7CgogIGludCBnZXRfZm9vKCApIGNvbnN0CiAgewogICByZXR1cm4gZm9vOwogIH0KfTsKCmNsYXNzIEd1bnNsaW5nZXIgOiBwdWJsaWMgUGVyc29uCnsKIHB1YmxpYzoKICBHdW5zbGluZ2VyKCApIDogUGVyc29uKCBjbGFzc0lkOjpndW5zbGluZ2VyICkgeyB9CiAgR3Vuc2xpbmdlciggaW50IGYgKSA6IFBlcnNvbiggZiApIHsgfQoKICBHdW5zbGluZ2VyKCBjb25zdCBHdW5zbGluZ2VyICYpID0gZGVmYXVsdDsKfTsKCmNsYXNzIFBva2VyUGxheWVyIDogdmlydHVhbCBwdWJsaWMgUGVyc29uCnsKIHB1YmxpYzoKICBQb2tlclBsYXllciggKSA6IFBlcnNvbiggY2xhc3NJZDo6cG9rZXJwbGF5ZXIgKSB7IH0KICBQb2tlclBsYXllciggaW50IGYgKSA6IFBlcnNvbiggZiApIHsgfQoKICBQb2tlclBsYXllciggY29uc3QgUG9rZXJQbGF5ZXIgJikgPSBkZWZhdWx0Owp9OwoKY2xhc3MgQmFkRHVkZSA6IHB1YmxpYyBHdW5zbGluZ2VyLCBwdWJsaWMgUG9rZXJQbGF5ZXIKewogcHVibGljOgogIEJhZER1ZGUoICkgOiBHdW5zbGluZ2VyOjpQZXJzb24oIGNsYXNzSWQ6OmJhZGR1ZGUgKSwgR3Vuc2xpbmdlcihjbGFzc0lkOjpiYWRkdWRlKSwgUG9rZXJQbGF5ZXIoIGNsYXNzSWQ6OmJhZGR1ZGUgKSB7IH0KfTsKCgppbnQgbWFpbiggKQp7CiBCYWREdWRlIGJkOwoKIHN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDxHdW5zbGluZ2VyPihiZCkuZ2V0X2ZvbygpIDw8IHN0ZDo6ZW5kbDsKIHN0ZDo6Y291dCA8PCBzdGF0aWNfY2FzdDxQb2tlclBsYXllcj4oYmQpLmdldF9mb28oKSA8PCBzdGQ6OmVuZGw7CgogcmV0dXJuIDA7Cn0K