#include <iostream>

typedef bool (*Require)(int x);
typedef int  (*Convert)(int x);

class Base {
private:
	int _x;
public:
	virtual void print() {
		std::cout << _x << std::endl;
	}
protected:
	Base(int x, Require r, Convert c) {
		if (r(x))
			_x = x;
		else
			_x = c(x);
	}
};

class Derived : public Base {
private:
	static bool require(int x) {
		return x >= 0;
	}
	static int  convert(int x) {
		return -1 * x;
	}
public:
	Derived(int x) : Base(x, require, convert) {}
};

int main() {
	Derived a(1);
	Derived b(-1);
	a.print();
	b.print();
	return 0;
}