#include <iostream>
class ServoPart {
public:
virtual bool move() {
std::cout << "servopart::move" << std::endl;
return true;
}
};
struct RoboPart {
virtual void doJob() =0;
virtual bool move() =0;
};
struct ServoRoboPart: public ServoPart, RoboPart
{
virtual bool move(){ ServoPart::move(); return true; };
};
class Claw : public ServoRoboPart {
public:
void doJob() {std::cout << "claw::doJob" << std::endl;}
};
class Arm : RoboPart {
public:
void doJob() {std::cout << "arm::doJob" << std::endl;}
bool move() {std::cout << "arm::move" << std::endl; return true;}
};
int main()
{
Claw c;
Arm a;
a.move();
a.doJob();
c.move();
c.doJob();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgU2Vydm9QYXJ0IHsKcHVibGljOgogICAgdmlydHVhbCBib29sIG1vdmUoKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJzZXJ2b3BhcnQ6Om1vdmUiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfTsKCnN0cnVjdCBSb2JvUGFydCB7CiAgICB2aXJ0dWFsIHZvaWQgZG9Kb2IoKSA9MDsKICAgIHZpcnR1YWwgYm9vbCBtb3ZlKCkgPTA7Cn07CgoKc3RydWN0IFNlcnZvUm9ib1BhcnQ6IHB1YmxpYyBTZXJ2b1BhcnQsIFJvYm9QYXJ0CnsKCXZpcnR1YWwgYm9vbCBtb3ZlKCl7IFNlcnZvUGFydDo6bW92ZSgpOyByZXR1cm4gdHJ1ZTsgfTsKfTsKCmNsYXNzIENsYXcgOiBwdWJsaWMgU2Vydm9Sb2JvUGFydCB7CnB1YmxpYzoKICAgIHZvaWQgZG9Kb2IoKSB7c3RkOjpjb3V0IDw8ICJjbGF3Ojpkb0pvYiIgPDwgc3RkOjplbmRsO30KfTsKCmNsYXNzIEFybSA6IFJvYm9QYXJ0IHsKcHVibGljOgogICAgdm9pZCBkb0pvYigpIHtzdGQ6OmNvdXQgPDwgImFybTo6ZG9Kb2IiIDw8IHN0ZDo6ZW5kbDt9CiAgICBib29sIG1vdmUoKSB7c3RkOjpjb3V0IDw8ICJhcm06Om1vdmUiIDw8IHN0ZDo6ZW5kbDsgcmV0dXJuIHRydWU7fQp9OwoKaW50IG1haW4oKQp7CglDbGF3IGM7CglBcm0gYTsKCWEubW92ZSgpOwoJYS5kb0pvYigpOwoJYy5tb3ZlKCk7CgljLmRvSm9iKCk7Cn0=