#include <iostream>
class Foo {
public:
Foo(int a) : m_a(a) {};
virtual ~Foo() {};
void PrintValue() {
std::cout << Value() << std::endl;
}
protected:
virtual int Value() {
return m_a;
}
private:
int m_a;
};
class Bar : public Foo
{
public:
Bar(int a, int b) : Foo(a), m_b(b) {};
virtual ~Bar() {};
int Value() override {
return m_b;
}
private:
int m_b;
};
int main(int argc, char** argv)
{
Bar b(10, 20);
b.PrintValue();
std::cout << b.Value() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRm9vIHsKcHVibGljOgogICAgRm9vKGludCBhKSA6IG1fYShhKSB7fTsKICAgIHZpcnR1YWwgfkZvbygpIHt9OwogICAgCiAgICB2b2lkIFByaW50VmFsdWUoKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IFZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgfQpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIGludCBWYWx1ZSgpIHsKICAgICAgICByZXR1cm4gbV9hOwogICAgfQpwcml2YXRlOgogICAgICAgIGludCBtX2E7CiAgICB9OwogICAgCmNsYXNzIEJhciA6IHB1YmxpYyBGb28KewpwdWJsaWM6CiAgICBCYXIoaW50IGEsIGludCBiKSA6IEZvbyhhKSwgbV9iKGIpIHt9OwogICAgdmlydHVhbCB+QmFyKCkge307CiAgICAKICAgIGludCBWYWx1ZSgpIG92ZXJyaWRlIHsKICAgICAgICByZXR1cm4gbV9iOwoJfQpwcml2YXRlOgoJaW50IG1fYjsKfTsKICAgICAgIAppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCnsKCUJhciBiKDEwLCAyMCk7CiAgICBiLlByaW50VmFsdWUoKTsKCXN0ZDo6Y291dCA8PCBiLlZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=