#include <iostream>
class Base
{
private:
int foo;
protected:
Base(int _foo)
{
foo = _foo;
}
public:
virtual void Foo()
{
std::cout << foo << std::endl;
}
};
class DerivedA : public Base
{
public:
DerivedA() : Base(123)
{
}
};
class DerivedB : public Base
{
private:
static int before(int x)
{
std::cout << "before" << std::endl;
return x * 2;
}
public:
DerivedB() : Base(before(123))
{
std::cout << "after" << std::endl;
}
};
int main() {
Base *a, *b;
a = new DerivedA();
b = new DerivedB();
delete a;
delete b;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZQp7CnByaXZhdGU6CglpbnQgZm9vOwpwcm90ZWN0ZWQ6CglCYXNlKGludCBfZm9vKQoJewoJCWZvbyA9IF9mb287Cgl9CnB1YmxpYzoKCXZpcnR1YWwgdm9pZCBGb28oKQoJewoJCXN0ZDo6Y291dCA8PCBmb28gPDwgc3RkOjplbmRsOwoJfQp9OwoKY2xhc3MgRGVyaXZlZEEgOiBwdWJsaWMgQmFzZQp7CnB1YmxpYzoKCURlcml2ZWRBKCkgOiBCYXNlKDEyMykKCXsKCX0KfTsKCmNsYXNzIERlcml2ZWRCIDogcHVibGljIEJhc2UKewpwcml2YXRlOgoJc3RhdGljIGludCBiZWZvcmUoaW50IHgpCgl7CgkJc3RkOjpjb3V0IDw8ICJiZWZvcmUiIDw8IHN0ZDo6ZW5kbDsKCQlyZXR1cm4geCAqIDI7Cgl9CnB1YmxpYzoKCURlcml2ZWRCKCkgOiBCYXNlKGJlZm9yZSgxMjMpKQoJewoJCXN0ZDo6Y291dCA8PCAiYWZ0ZXIiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCmludCBtYWluKCkgewoJQmFzZSAqYSwgKmI7CglhID0gbmV3IERlcml2ZWRBKCk7CgliID0gbmV3IERlcml2ZWRCKCk7CglkZWxldGUgYTsKCWRlbGV0ZSBiOwoJcmV0dXJuIDA7Cn0=