#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;
}